[geany/geany-plugins] 7eede3: vimode: A Vim Mode for Geany

Jiří Techet git-noreply at xxxxx
Mon May 28 18:12:21 UTC 2018


Branch:      refs/heads/master
Author:      Jiří Techet <techet at gmail.com>
Committer:   Jiří Techet <techet at gmail.com>
Date:        Fri, 20 Apr 2018 17:13:55 UTC
Commit:      7eede302ecedce6f2e3a0e28f0c3ee71117eaeb3
             https://github.com/geany/geany-plugins/commit/7eede302ecedce6f2e3a0e28f0c3ee71117eaeb3

Log Message:
-----------
vimode: A Vim Mode for Geany

I know what you think - the last thing Geany needed...


Modified Paths:
--------------
    MAINTAINERS
    Makefile.am
    build/geany-plugins.nsi
    build/vimode.m4
    configure.ac
    po/POTFILES.in
    vimode/AUTHORS
    vimode/COPYING
    vimode/ChangeLog
    vimode/Makefile.am
    vimode/NEWS
    vimode/README
    vimode/THANKS
    vimode/index.txt
    vimode/src/Makefile.am
    vimode/src/backends/backend-geany.c
    vimode/src/backends/backend-viw.c
    vimode/src/cmd-params.c
    vimode/src/cmd-params.h
    vimode/src/cmd-runner.c
    vimode/src/cmd-runner.h
    vimode/src/cmds/changemode.c
    vimode/src/cmds/changemode.h
    vimode/src/cmds/edit.c
    vimode/src/cmds/edit.h
    vimode/src/cmds/motion.c
    vimode/src/cmds/motion.h
    vimode/src/cmds/special.c
    vimode/src/cmds/special.h
    vimode/src/cmds/txtobjs.c
    vimode/src/cmds/txtobjs.h
    vimode/src/context.h
    vimode/src/excmd-params.h
    vimode/src/excmd-prompt.c
    vimode/src/excmd-prompt.h
    vimode/src/excmd-runner.c
    vimode/src/excmd-runner.h
    vimode/src/excmds/excmds.c
    vimode/src/excmds/excmds.h
    vimode/src/keypress.c
    vimode/src/keypress.h
    vimode/src/sci.c
    vimode/src/sci.h
    vimode/src/utils.c
    vimode/src/utils.h
    vimode/src/vi.c
    vimode/src/vi.h

Modified: MAINTAINERS
7 lines changed, 7 insertions(+), 0 deletions(-)
===================================================================
@@ -299,6 +299,13 @@ M: Frank Lanitz <frank at frank.uvena.de>
 W: http://plugins.geany.org/updatechecker.html
 S: Maintained
 
+vimode
+P: Jiří Techet <techet at gmail.com>
+g: @techee
+M: Jiří Techet <techet at gmail.com>
+W: http://plugins.geany.org/vimode.html
+S: Maintained
+
 webhelper
 P: Colomban Wendling <ban at herbesfolles.org>
 g: @b4n


Modified: Makefile.am
4 lines changed, 4 insertions(+), 0 deletions(-)
===================================================================
@@ -172,6 +172,10 @@ if ENABLE_UPDATECHECKER
 SUBDIRS += updatechecker
 endif
 
+if ENABLE_VIMODE
+SUBDIRS += vimode
+endif
+
 if ENABLE_WEBHELPER
 SUBDIRS += webhelper
 endif


Modified: build/geany-plugins.nsi
1 lines changed, 1 insertions(+), 0 deletions(-)
===================================================================
@@ -197,6 +197,7 @@ Section Uninstall
 	Delete "$INSTDIR\lib\geany\tableconvert.dll"
 	Delete "$INSTDIR\lib\geany\treebrowser.dll"
 	Delete "$INSTDIR\lib\geany\updatechecker.dll"
+	Delete "$INSTDIR\lib\geany\vimode.dll"
 	Delete "$INSTDIR\lib\geany\webhelper.dll"
 	Delete "$INSTDIR\lib\geany\workbench.dll"
 	Delete "$INSTDIR\lib\geany\xmlsnippets.dll"


Modified: build/vimode.m4
9 lines changed, 9 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,9 @@
+AC_DEFUN([GP_CHECK_VIMODE],
+[
+    GP_ARG_DISABLE([Vimode], [auto])
+    GP_COMMIT_PLUGIN_STATUS([Vimode])
+    AC_CONFIG_FILES([
+        vimode/Makefile
+        vimode/src/Makefile
+    ])
+])


Modified: configure.ac
1 lines changed, 1 insertions(+), 0 deletions(-)
===================================================================
@@ -70,6 +70,7 @@ GP_CHECK_SPELLCHECK
 GP_CHECK_TREEBROWSER
 GP_CHECK_TABLECONVERT
 GP_CHECK_UPDATECHECKER
+GP_CHECK_VIMODE
 GP_CHECK_WEBHELPER
 GP_CHECK_WORKBENCH
 GP_CHECK_XMLSNIPPETS


Modified: po/POTFILES.in
3 lines changed, 3 insertions(+), 0 deletions(-)
===================================================================
@@ -304,6 +304,9 @@ treebrowser/src/treebrowser.c
 # UpdateChecker
 updatechecker/src/updatechecker.c
 
+# ViMode
+vimode/src/backends/backend-geany.c
+
 # WebHelper
 webhelper/src/gwh-enum-types.c
 webhelper/src/gwh-keybindings.c


Modified: vimode/AUTHORS
1 lines changed, 1 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1 @@
+Jiří Techet <techet at gmail.com>


Modified: vimode/COPYING
340 lines changed, 340 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,340 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+	51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program 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 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.


Modified: vimode/ChangeLog
0 lines changed, 0 insertions(+), 0 deletions(-)
===================================================================
No diff available, check online


Modified: vimode/Makefile.am
4 lines changed, 4 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,4 @@
+include $(top_srcdir)/build/vars.auxfiles.mk
+
+SUBDIRS = src
+plugin = vimode


Modified: vimode/NEWS
0 lines changed, 0 insertions(+), 0 deletions(-)
===================================================================
No diff available, check online


Modified: vimode/README
565 lines changed, 565 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,565 @@
+======
+Vimode
+======
+
+.. contents::
+
+
+About
+=====
+
+Vimode is a Vim-mode plugin for Geany written by a guy who does not use Vim.
+Expect problems unexpected by a Vim user and, please, report them.
+
+Despite the limited Vim knowledge of the author, the plugin tries to be a
+reasonably complete Vim mode implementation featuring:
+
+* normal mode, insert/replace mode, visual mode, line visual mode
+* repeated commands (e.g. 10dd - delete 10 lines)
+* "motion" commands (e.g. d10l - delete 10 characters to the right)
+* "text object" commands (e.g. di( - delete inner contents of parentheses)
+* visual mode commands (e.g. ~ to swap case of the selected text)
+* basic ex mode commands like :s, including range specifications (e.g.
+  :5,8s/foo/bar/g - replace foo with bar on lines 5 through 8)
+* most basic navigation, selection and text manipulation commands - see the end
+  of this file for the full list
+* command repetition using "." and repeated insert
+
+It should be relatively easy to add more (non-special) commands so if you run
+into something you are missing, please let me know.
+
+Setup and Configuration
+=======================
+The plugin can be enabled/disabled from the Plugin Manager of Geany. Once enabled,
+it adds a new menu called Vim Mode under the Tools menu with the following items.
+
+Enable Vim Mode
+---------------
+Enables/disables the Vim mode. A keybinding can be assigned to this action so
+you can for instance use Geany normally and enable/disable the Vim mode as
+needed.
+
+Insert Mode for Dummies
+-----------------------
+This makes the insert mode behave like normal Geany, only the escape key allows
+you to switch to the Vim command mode. This is basically "Vim for the rest of us"
+who want to use the editor in a standard (understand non-vim) way but who like
+the idea of having access to Vim commands from time to time. Highly unintrusive
+so you basically do not know about the Vim mode normally.
+
+Start in Insert Mode
+--------------------
+By default, the plugin starts in the normal mode. If you enable the "dummies"
+mode above, you might also want to enable this option so you do not have to
+switch to the insert mode manually when the application starts.
+
+Behavior
+========
+Upon changing mode, the plugin writes the current mode in the status bar. The
+caret shape also indicates the current mode:
+
+* block, not blinking - normal mode
+* vertical line, not blinking - visual mode
+* blinking vertical line - insert mode
+* blinking underscore - replace mode
+
+When evaluating key presses, the plugin checks if the keypress is a Vim command
+or a part of a command in which case the plugin consumes the key press event
+and does not propagate it to Geany. When the keypress is not a Vim command,
+the plugin sends it to Geany which processes it normally based in its internal
+logic. This means that it is still possible to use normal Geany keybindings
+with this plugin unless they conflict with a Vim command.
+
+If autocompletion popups or tooltips are present in insert mode, escape closes
+them first without entering the normal mode so you do not enter normal mode
+by accident.
+
+Limitations and Problems
+------------------------
+I tried to implement a reasonable subset of Vim commands but please note that
+the judgement what is a reasonable set of commands was made by a guy who does not
+use Vim. So it is very probable I missed some totally fundamental behavior
+of Vim every Vim user would expect to be present. Please report such problems.
+
+This is an incomplete list of known limitations of the plugin:
+
+* selection in visual mode does not behave the same way as in Vim - the reason is
+  that the editor component Geany uses (Scintilla) uses cursor which is always
+  between characters and not on characters (block cursor which appears to be
+  on top of a character behaves as if it were before the character). This may lead
+  to situations when the position of the cursor is off by one. This issue might
+  be fixed later but it will be tricky.
+* undo does not preserve cursor position the same way Vim does - probably fixable
+* block visual mode is not implemented - probably possible using Scintilla's
+  multiple selection feature
+* select submode of insert mode is not implemented
+* named registers and related commands are not implemented
+* Ctrl+X mode is not implemented
+* marks are not implemented
+* fold commands are not implemented
+* most commands starting with "'", "z", and "g" are not implemented
+* most ex mode commands are not implemented (excluding basic stuff like search,
+  replace, saving, etc.)
+* despite being mentioned below, none of the commands for quitting (:q, ZZ, etc.)
+  work because the corresponding function is not in Geany API yet - everything is
+  ready in the plugin though
+* only the 'g' flag is supported in the substitute command
+* in search and substitute the regular expressions are based on Scintilla regular
+  expressions which differ from Vim. Check the Scintilla documentation at
+  http://www.scintilla.org/ScintillaDoc.html#Searching for more details.
+  In addition, \c is also supported to allow case-insensitive search.
+
+FAQ
+===
+
+Why does Vimode suck so much?
+-----------------------------
+Well, it simulates the Vim behavior - what did you expect?
+
+No, stupid, I mean why does your implementation suck so much?
+-------------------------------------------------------------
+Ah, that's simple - I am not a Vim user. Before writing this plugin, I knew
+about 5 Vim commands (after writing this plugin, my knowledge has nearly doubled).
+Even though I kind of like the idea behind the editor, my poor brain isn't able
+to remember in which mode I currently am and what keypresses I can use. This
+means I don't really know how a typical user uses Vim and I probably miss
+some very basic things Vim users take for granted. Please report such issues
+so I can improve the plugin.
+
+So why the hell did you write this plugin?
+------------------------------------------
+It was the constant whining of Vim users at Prague and Chemnitz Linux Days which
+made me write the plugin. And it turned out that writing a Vim editor is
+quite a lot of fun - much more than using it.
+
+Meh, even I could write a better Vim plugin
+-------------------------------------------
+Great! Submit patches! Fix bugs! All contributions are really welcome.
+
+Help! I enabled your plugin together with others and the editor is really strange now!
+--------------------------------------------------------------------------------------
+This, my friend, is the world of Vim. Welcome! Fortunately, you can easily
+disable it using Geany's Plugin Manager. Phew!
+
+Help! I am a long-time Vim user and can't quit the editor, :q doesn't work!
+---------------------------------------------------------------------------
+Geany currently doesn't allow plugins to quit the editor so you have to do
+it in a non-vim way. This is where the tricky part starts for Vim users: with your
+mouse navigate to the top-right corner of the window to the X button and click
+it - behold, the window closes (I know, totally counter-intuitive for Vim users).
+
+After building the plugin, I noticed a binary called viw, what is it?
+---------------------------------------------------------------------
+After I started writing the plugin, I soon realized that in fact, I am writing
+a new editor. I nearly didn't use any Geany calls and most of the code just
+calls the Scintilla API. At this point I decided to separate the Geany plugin
+part from the rest of the code which is completely Geany-independent. And now
+I could write a simple editor which just uses Scintilla and GTK (well,
+not exactly - the way it builds now it still uses Scintilla from libgeany
+but the build could be easily modified to link against statically built
+Scintilla without any Geany dependency). So yeah, I'm a real man now, have my own
+editor - it only sucks it's a Vim clone. And in fact it turned out to be useful
+for the development of the plugin because one can use the viw (Vi Worsened)
+editor for testing instead of having to restart Geany all the time.
+
+So does it mean I could use your code and add Vim support to another editor?
+----------------------------------------------------------------------------
+Yes - as long as the editor is based on Scintilla and GTK. If it is, it should
+be really simple - just check the "backends" directory how it is done for Geany
+and viw. I believe it should still be quite simple to modify the code if
+the editor uses Scintilla but doesn't use GTK - the amount of the used GTK code
+is very small (most work will be with re-mapping the key event codes to the
+other library). If your editor isn't Scintilla-based, you are more or less
+doomed - most of the code deals with Scintilla and switching to a different
+editor component basically means rewriting the plugin.
+
+Contact
+=======
+
+Author
+------
+Jiří Techet, <techet(at)gmail(dot)com>.
+
+Bug Reports
+-----------
+To report bugs, please use the Geany-Plugins GitHub page at
+https://github.com/geany/geany-plugins/issues
+
+License
+=======
+
+Vimode is distributed under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.  A copy of this license
+can be found in the file COPYING included with the source code of this
+program.
+
+Downloads
+=========
+
+Vimode is part of the combined Geany Plugins release. For more information and
+downloads, please visit http://plugins.geany.org/geany-plugins/
+
+Source Code
+===========
+
+The source code is available at::
+
+    git clone https://github.com/geany/geany-plugins.git
+
+Implemented Commands
+====================
+The rest of the file contains a list of Vim commands which have been at least
+partially implemented in the plugin. This is taken from the index.txt Vim help
+file which is also present in the root directory of the plugin. If you add
+a new command, please do not forget to update the table below.::
+
+    ==============================================================================
+    1. Insert mode                                          insert-index
+
+    tag             char            action in Insert mode   
+    -----------------------------------------------------------------------
+    i_CTRL-@      CTRL-@          insert previously inserted text and stop
+                                    insert
+    i_CTRL-A      CTRL-A          insert previously inserted text
+    i_CTRL-C      CTRL-C          quit insert mode, without checking for
+                                    abbreviation, unless 'insertmode' set.
+    i_CTRL-D      CTRL-D          delete one shiftwidth of indent in the current
+                                    line
+    i_CTRL-E      CTRL-E          insert the character which is below the cursor
+    i_<BS>        <BS>            delete character before the cursor
+    i_CTRL-H      CTRL-H          same as <BS>
+    i_<Tab>       <Tab>           insert a <Tab> character
+    i_CTRL-I      CTRL-I          same as <Tab>
+    i_<NL>        <NL>            same as <CR>
+    i_CTRL-J      CTRL-J          same as <CR>
+    i_<CR>        <CR>            begin new line
+    i_CTRL-M      CTRL-M          same as <CR>
+    i_CTRL-O      CTRL-O          execute a single command and return to insert
+                                    mode
+    i_CTRL-T      CTRL-T          insert one shiftwidth of indent in current
+                                    line
+    i_CTRL-W      CTRL-W          delete word before the cursor
+    i_CTRL-Y      CTRL-Y          insert the character which is above the cursor
+    i_<Esc>       <Esc>           end insert mode (unless 'insertmode' set)
+    i_CTRL-[      CTRL-[          same as <Esc>
+    i_<Del>       <Del>           delete character under the cursor
+
+    i_<Left>      <Left>          cursor one character left
+    i_<S-Left>    <S-Left>        cursor one word left
+    i_<C-Left>    <C-Left>        cursor one word left
+    i_<Right>     <Right>         cursor one character right
+    i_<S-Right>   <S-Right>       cursor one word right
+    i_<C-Right>   <C-Right>       cursor one word right
+    i_<Up>        <Up>            cursor one line up
+    i_<S-Up>      <S-Up>          same as <PageUp>
+    i_<Down>      <Down>          cursor one line down
+    i_<S-Down>    <S-Down>        same as <PageDown>
+    i_<Home>      <Home>          cursor to start of line
+    i_<C-Home>    <C-Home>        cursor to start of file
+    i_<End>       <End>           cursor past end of line
+    i_<C-End>     <C-End>         cursor past end of file
+    i_<PageUp>    <PageUp>        one screenful backward
+    i_<PageDown>  <PageDown>      one screenful forward
+    i_<Insert>    <Insert>        toggle Insert/Replace mode
+
+    ==============================================================================
+    2. Normal mode                                          normal-index
+
+    CHAR     any non-blank character
+    WORD     a sequence of non-blank characters
+    N        a number entered before the command
+    {motion} a cursor movement command
+    Nmove    the text that is moved over with a {motion}
+    SECTION  a section that possibly starts with '}' instead of '{'
+
+    note: 1 = cursor movement command; 2 = can be undone/redone
+
+    tag             char          note action in Normal mode        
+    ------------------------------------------------------------------------------
+    CTRL-B        CTRL-B          1  scroll N screens Backwards
+    CTRL-D        CTRL-D             scroll Down N lines (default: half a screen)
+    CTRL-E        CTRL-E             scroll N lines upwards (N lines Extra)
+    CTRL-F        CTRL-F          1  scroll N screens Forward
+    <BS>          <BS>            1  same as "h"
+    CTRL-H        CTRL-H          1  same as "h"
+    <NL>          <NL>            1  same as "j"
+    CTRL-J        CTRL-J          1  same as "j"
+    <CR>          <CR>            1  cursor to the first CHAR N lines lower
+    CTRL-M        CTRL-M          1  same as <CR>
+    CTRL-N        CTRL-N          1  same as "j"
+    CTRL-P        CTRL-P          1  same as "k"
+    CTRL-R        CTRL-R          2  redo changes which were undone with 'u'
+    CTRL-U        CTRL-U             scroll N lines Upwards (default: half a
+                                       screen)
+    CTRL-Y        CTRL-Y             scroll N lines downwards
+
+    <Space>       <Space>         1  same as "l"
+    #             #               1  search backward for the Nth occurrence of
+                                       the ident under the cursor
+    $             $               1  cursor to the end of Nth next line
+    %             %               1  find the next (curly/square) bracket on
+                                       this line and go to its match, or go to
+                                       matching comment bracket, or go to matching
+                                       preprocessor directive.
+    N%            {count}%        1  go to N percentage in the file
+    &             &               2  repeat last :s
+    star          *               1  search forward for the Nth occurrence of
+                                       the ident under the cursor
+    +             +               1  same as <CR>
+    ,             ,               1  repeat latest f, t, F or T in opposite
+                                       direction N times
+    -             -               1  cursor to the first CHAR N lines higher
+    .             .               2  repeat last change with count replaced with
+                                       N
+    /             /{pattern}<CR>  1  search forward for the Nth occurrence of
+                                       {pattern}
+    /<CR>         /<CR>           1  search forward for {pattern} of last search
+    count         0               1  cursor to the first char of the line
+    count         1                  prepend to command to give a count
+    count         2                       "
+    count         3                       "
+    count         4                       "
+    count         5                       "
+    count         6                       "
+    count         7                       "
+    count         8                       "
+    count         9                       "
+    :             :               1  start entering an Ex command
+    ;             ;               1  repeat latest f, t, F or T N times
+    <             <{motion}       2  shift Nmove lines one 'shiftwidth'
+                                       leftwards
+    <<            <<              2  shift N lines one 'shiftwidth' leftwards
+    >             >{motion}       2  shift Nmove lines one 'shiftwidth'
+                                       rightwards
+    >>            >>              2  shift N lines one 'shiftwidth' rightwards
+    ?             ?{pattern}<CR>  1  search backward for the Nth previous
+                                       occurrence of {pattern}
+    ?<CR>         ?<CR>           1  search backward for {pattern} of last search
+    A             A               2  append text after the end of the line N times
+    B             B               1  cursor N WORDS backward
+    C             ["x]C           2  change from the cursor position to the end
+                                       of the line, and N-1 more lines [into
+                                       register x]; synonym for "c$"
+    D             ["x]D           2  delete the characters under the cursor
+                                       until the end of the line and N-1 more
+                                       lines [into register x]; synonym for "d$"
+    E             E               1  cursor forward to the end of WORD N
+    F             F{char}         1  cursor to the Nth occurrence of {char} to
+                                       the left
+    G             G               1  cursor to line N, default last line
+    H             H               1  cursor to line N from top of screen
+    I             I               2  insert text before the first CHAR on the
+                                       line N times
+    J             J               2  Join N lines; default is 2
+    L             L               1  cursor to line N from bottom of screen
+    M             M               1  cursor to middle line of screen
+    N             N               1  repeat the latest '/' or '?' N times in
+                                       opposite direction
+    O             O               2  begin a new line above the cursor and
+                                       insert text, repeat N times
+    P             ["x]P           2  put the text [from register x] before the
+                                       cursor N times
+    R             R               2  enter replace mode: overtype existing
+                                       characters, repeat the entered text N-1
+                                       times
+    S             ["x]S           2  delete N lines [into register x] and start
+                                       insert; synonym for "cc".
+    T             T{char}         1  cursor till after Nth occurrence of {char}
+                                       to the left
+    V             V                  start linewise Visual mode
+    W             W               1  cursor N WORDS forward
+    X             ["x]X           2  delete N characters before the cursor [into
+                                       register x]
+    Y             ["x]Y              yank N lines [into register x]; synonym for
+                                       "yy"
+    ZZ            ZZ                 store current file if modified, and exit
+    ZQ            ZQ                 exit current file always
+    ^             ^               1  cursor to the first CHAR of the line
+    _             _               1  cursor to the first CHAR N - 1 lines lower
+    a             a               2  append text after the cursor N times
+    b             b               1  cursor N words backward
+    c             ["x]c{motion}   2  delete Nmove text [into register x] and
+                                       start insert
+    cc            ["x]cc          2  delete N lines [into register x] and start
+                                       insert
+    d             ["x]d{motion}   2  delete Nmove text [into register x]
+    dd            ["x]dd          2  delete N lines [into register x]
+    e             e               1  cursor forward to the end of word N
+    f             f{char}         1  cursor to Nth occurrence of {char} to the
+                                       right
+    g             g{char}            extended commands, see g below
+    h             h               1  cursor N chars to the left
+    i             i               2  insert text before the cursor N times
+    j             j               1  cursor N lines downward
+    k             k               1  cursor N lines upward
+    l             l               1  cursor N chars to the right
+    n             n               1  repeat the latest '/' or '?' N times
+    o             o               2  begin a new line below the cursor and
+                                       insert text, repeat N times
+    p             ["x]p           2  put the text [from register x] after the
+                                       cursor N times
+    r             r{char}         2  replace N chars with {char}
+    s             ["x]s           2  (substitute) delete N characters [into
+                                       register x] and start insert
+    t             t{char}         1  cursor till before Nth occurrence of {char}
+                                       to the right
+    u             u               2  undo changes
+    v             v                  start characterwise Visual mode
+    w             w               1  cursor N words forward
+    x             ["x]x           2  delete N characters under and after the
+                                       cursor [into register x]
+    y             ["x]y{motion}      yank Nmove text [into register x]
+    yy            ["x]yy             yank N lines [into register x]
+    bar           |               1  cursor to column N
+    ~             ~               2  'tildeop' off: switch case of N characters
+                                       under cursor and move the cursor N
+                                       characters to the right
+    <C-End>       <C-End>         1  same as "G"
+    <C-Home>      <C-Home>        1  same as "gg"
+    <C-Left>      <C-Left>        1  same as "b"
+    <C-Right>     <C-Right>       1  same as "w"
+    <Del>         ["x]<Del>       2  same as "x"
+    <Down>        <Down>          1  same as "j"
+    <End>         <End>           1  same as "$"
+    <Home>        <Home>          1  same as "0"
+    <Insert>      <Insert>        2  same as "i"
+    <Left>        <Left>          1  same as "h"
+    <PageDown>    <PageDown>         same as CTRL-F
+    <PageUp>      <PageUp>           same as CTRL-B
+    <Right>       <Right>         1  same as "l"
+    <S-Down>      <S-Down>        1  same as CTRL-F
+    <S-Left>      <S-Left>        1  same as "b"
+    <S-Right>     <S-Right>       1  same as "w"
+    <S-Up>        <S-Up>          1  same as CTRL-B
+    <Up>          <Up>            1  same as "k"
+
+    ==============================================================================
+    2.1 Text objects                                                objects
+
+    These can be used after an operator or in Visual mode to select an object.
+
+    tag             command            action in op-pending and Visual mode 
+    ------------------------------------------------------------------------------
+    v_aquote      a"                 double quoted string
+    v_a'          a'                 single quoted string
+    v_a(          a(                 same as ab
+    v_a)          a)                 same as ab
+    v_a<          a<                 "a <>" from '<' to the matching '>'
+    v_a>          a>                 same as a<
+    v_aB          aB                 "a Block" from "[{" to "]}" (with brackets)
+    v_a[          a[                 "a []" from '[' to the matching ']'
+    v_a]          a]                 same as a[
+    v_a`          a`                 string in backticks
+    v_ab          ab                 "a block" from "[(" to "])" (with braces)
+    v_a{          a{                 same as aB
+    v_a}          a}                 same as aB
+    v_iquote      i"                 double quoted string without the quotes
+    v_i'          i'                 single quoted string without the quotes
+    v_i(          i(                 same as ib
+    v_i)          i)                 same as ib
+    v_i<          i<                 "inner <>" from '<' to the matching '>'
+    v_i>          i>                 same as i<
+    v_iB          iB                 "inner Block" from "[{" and "]}"
+    v_i[          i[                 "inner []" from '[' to the matching ']'
+    v_i]          i]                 same as i[
+    v_i`          i`                 string in backticks without the backticks
+    v_ib          ib                 "inner block" from "[(" to "])"
+    v_i{          i{                 same as iB
+    v_i}          i}                 same as iB
+
+    ==============================================================================
+    2.4 Commands starting with 'g'                                          g
+
+    tag             char          note action in Normal mode        
+    ------------------------------------------------------------------------------
+    gE            gE              1  go backwards to the end of the previous
+                                       WORD
+    gU            gU{motion}      2  make Nmove text uppercase
+    ge            ge              1  go backwards to the end of the previous
+                                       word
+    gg            gg              1  cursor to line N, default first line
+    gu            gu{motion}      2  make Nmove text lowercase
+    g~            g~{motion}      2  swap case for Nmove text
+
+    ==============================================================================
+    2.5 Commands starting with 'z'                                          z
+
+    tag             char          note action in Normal mode        
+    ------------------------------------------------------------------------------
+    z<CR>         z<CR>              redraw, cursor line to top of window,
+                                       cursor on first non-blank
+    z+            z+                 cursor on line N (default line below
+                                       window), otherwise like "z<CR>"
+    z-            z-                 redraw, cursor line at bottom of window,
+                                       cursor on first non-blank
+    z.            z.                 redraw, cursor line to center of window,
+                                       cursor on first non-blank
+    zb            zb                 redraw, cursor line at bottom of window
+    zt            zt                 redraw, cursor line at top of window
+    zz            zz                 redraw, cursor line at center of window
+
+    ==============================================================================
+    3. Visual mode                                          visual-index
+
+    Most commands in Visual mode are the same as in Normal mode.  The ones listed
+    here are those that are different.
+
+    tag             command       note action in Visual mode        
+    ------------------------------------------------------------------------------
+    v_CTRL-C      CTRL-C             stop Visual mode
+    v_:           :                  start a command-line with the highlighted
+                                       lines as a range
+    v_<           <               2  shift the highlighted lines one
+                                       'shiftwidth' left
+    v_>           >               2  shift the highlighted lines one
+                                       'shiftwidth' right
+    v_C           C               2  delete the highlighted lines and start
+                                       insert
+    v_D           D               2  delete the highlighted lines
+    v_J           J               2  join the highlighted lines
+    v_O           O                  Move horizontally to other corner of area.
+    v_R           R               2  delete the highlighted lines and start
+                                       insert
+    v_S           S               2  delete the highlighted lines and start
+                                       insert
+    v_U           U               2  make highlighted area uppercase
+    v_V           V                  make Visual mode linewise or stop Visual
+                                       mode
+    v_X           X               2  delete the highlighted lines
+    v_Y           Y                  yank the highlighted lines
+    v_c           c               2  delete highlighted area and start insert
+    v_d           d               2  delete highlighted area
+    v_o           o                  move cursor to other corner of area
+    v_r           r               2  delete highlighted area and start insert
+    v_s           s               2  delete highlighted area and start insert
+    v_u           u               2  make highlighted area lowercase
+    v_v           v                  make Visual mode characterwise or stop
+                                       Visual mode
+    v_x           x               2  delete the highlighted area
+    v_y           y                  yank the highlighted area
+    v_~           ~               2  swap case for the highlighted area
+
+    ==============================================================================
+    5. EX commands                                  ex-cmd-index :index
+
+    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 
+    ------------------------------------------------------------------------------
+    :&            :&              repeat last ":substitute"
+    :cquit        :cq[uit]        quit Vim with an error code
+    :exit         :exi[t]         same as ":xit"
+    :quit         :q[uit]         quit current window (when one window quit Vim)
+    :quitall      :quita[ll]      quit Vim
+    :qall         :qa[ll]         quit Vim
+    :substitute   :s[ubstitute]   find and replace text
+    :update       :up[date]       write buffer if modified
+    :write        :w[rite]        write to a file
+    :wall         :wa[ll]         write all (changed) buffers
+    :wq           :wq             write to a file and quit window or Vim
+    :wqall        :wqa[ll]        write all changed buffers and quit Vim
+    :xit          :x[it]          write if buffer changed and quit window or Vim
+    :xall         :xa[ll]         same as ":wqall"


Modified: vimode/THANKS
8 lines changed, 8 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,8 @@
+Various parts of the plugin code were taken from other Geany plugins, from Geany
+code or Scintilla. Thanks to all the authors of the corresponding code.
+
+Thanks to Frank Lanitz for the name of the plugin.
+
+Thanks to Bill Joy and Bram Moolenaar for creating vi and vim, respectively, so
+every bloody editor on the planet has to create a compatibility mode with this
+crazy editor to make users happy.


Modified: vimode/index.txt
1657 lines changed, 1657 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,1657 @@
+index.txt     For Vim version 8.0.  Last change: 2017 Aug 02
+
+
+                  VIM REFERENCE MANUAL    by Bram Moolenaar
+
+                                                                index
+This file contains a list of all commands for each mode, with a tag and a
+short description.  The lists are sorted on ASCII value.
+
+Tip: When looking for certain functionality, use a search command.  E.g.,
+to look for deleting something, use: "/delete".
+
+1. Insert mode                          insert-index
+2. Normal mode                          normal-index
+   2.1. Text objects                    objects
+   2.2. Window commands                 CTRL-W
+   2.3. Square bracket commands         [
+   2.4. Commands starting with 'g'      g
+   2.5. Commands starting with 'z'      z
+3. Visual mode                          visual-index
+4. Command-line editing                 ex-edit-index
+5. EX commands                          ex-cmd-index
+
+For an overview of options see help.txt option-list.
+For an overview of built-in functions see functions.
+For a list of Vim variables see vim-variable.
+For a complete listing of all help items see help-tags.
+
+==============================================================================
+1. Insert mode                                          insert-index
+
+tag             char            action in Insert mode   
+-----------------------------------------------------------------------
+i_CTRL-@      CTRL-@          insert previously inserted text and stop
+                                insert
+i_CTRL-A      CTRL-A          insert previously inserted text
+                CTRL-B          not used i_CTRL-B-gone
+i_CTRL-C      CTRL-C          quit insert mode, without checking for
+                                abbreviation, unless 'insertmode' set.
+i_CTRL-D      CTRL-D          delete one shiftwidth of indent in the current
+                                line
+i_CTRL-E      CTRL-E          insert the character which is below the cursor
+                CTRL-F          not used (but by default it's in 'cinkeys' to
+                                re-indent the current line)
+i_CTRL-G_j    CTRL-G CTRL-J   line down, to column where inserting started
+i_CTRL-G_j    CTRL-G j        line down, to column where inserting started
+i_CTRL-G_j    CTRL-G <Down>   line down, to column where inserting started
+i_CTRL-G_k    CTRL-G CTRL-K   line up, to column where inserting started
+i_CTRL-G_k    CTRL-G k        line up, to column where inserting started
+i_CTRL-G_k    CTRL-G <Up>     line up, to column where inserting started
+i_CTRL-G_u    CTRL-G u        start new undoable edit
+i_CTRL-G_U    CTRL-G U        don't break undo with next cursor movement
+i_<BS>        <BS>            delete character before the cursor
+i_digraph     {char1}<BS>{char2}
+                                enter digraph (only when 'digraph' option set)
+i_CTRL-H      CTRL-H          same as <BS>
+i_<Tab>       <Tab>           insert a <Tab> character
+i_CTRL-I      CTRL-I          same as <Tab>
+i_<NL>        <NL>            same as <CR>
+i_CTRL-J      CTRL-J          same as <CR>
+i_CTRL-K      CTRL-K {char1} {char2}
+                                enter digraph
+i_CTRL-L      CTRL-L          when 'insertmode' set: Leave Insert mode
+i_<CR>        <CR>            begin new line
+i_CTRL-M      CTRL-M          same as <CR>
+i_CTRL-N      CTRL-N          find next match for keyword in front of the
+                                cursor
+i_CTRL-O      CTRL-O          execute a single command and return to insert
+                                mode
+i_CTRL-P      CTRL-P          find previous match for keyword in front of
+                                the cursor
+i_CTRL-Q      CTRL-Q          same as CTRL-V, unless used for terminal
+                                control flow
+i_CTRL-R      CTRL-R {0-9a-z"%#*:=}
+                                insert the contents of a register
+i_CTRL-R_CTRL-R CTRL-R CTRL-R {0-9a-z"%#*:=}
+                                insert the contents of a register literally
+i_CTRL-R_CTRL-O CTRL-R CTRL-O {0-9a-z"%#*:=}
+                                insert the contents of a register literally
+                                and don't auto-indent
+i_CTRL-R_CTRL-P CTRL-R CTRL-P {0-9a-z"%#*:=}
+                                insert the contents of a register literally
+                                and fix indent.
+                CTRL-S          (used for terminal control flow)
+i_CTRL-T      CTRL-T          insert one shiftwidth of indent in current
+                                line
+i_CTRL-U      CTRL-U          delete all entered characters in the current
+                                line
+i_CTRL-V      CTRL-V {char}   insert next non-digit literally
+i_CTRL-V_digit CTRL-V {number} insert three digit decimal number as a single
+                                byte.
+i_CTRL-W      CTRL-W          delete word before the cursor
+i_CTRL-X      CTRL-X {mode}   enter CTRL-X sub mode, see i_CTRL-X_index
+i_CTRL-Y      CTRL-Y          insert the character which is above the cursor
+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'
+                CTRL-\ a - z    reserved for extensions
+                CTRL-\ others   not used
+i_CTRL-]      CTRL-]          trigger abbreviation
+i_CTRL-^      CTRL-^          toggle use of :lmap mappings
+i_CTRL-_      CTRL-_          When 'allowrevins' set: change language
+                                (Hebrew, Farsi) {only when compiled with
+                                the +rightleft feature}
+
+                <Space> to '~'  not used, except '0' and '^' followed by
+                                CTRL-D
+
+i_0_CTRL-D    0 CTRL-D        delete all indent in the current line
+i_^_CTRL-D    ^ CTRL-D        delete all indent in the current line, restore
+                                it in the next line
+
+i_<Del>       <Del>           delete character under the cursor
+
+                Meta characters (0x80 to 0xff, 128 to 255)
+                                not used
+
+i_<Left>      <Left>          cursor one character left
+i_<S-Left>    <S-Left>        cursor one word left
+i_<C-Left>    <C-Left>        cursor one word left
+i_<Right>     <Right>         cursor one character right
+i_<S-Right>   <S-Right>       cursor one word right
+i_<C-Right>   <C-Right>       cursor one word right
+i_<Up>        <Up>            cursor one line up
+i_<S-Up>      <S-Up>          same as <PageUp>
+i_<Down>      <Down>          cursor one line down
+i_<S-Down>    <S-Down>        same as <PageDown>
+i_<Home>      <Home>          cursor to start of line
+i_<C-Home>    <C-Home>        cursor to start of file
+i_<End>       <End>           cursor past end of line
+i_<C-End>     <C-End>         cursor past end of file
+i_<PageUp>    <PageUp>        one screenful backward
+i_<PageDown>  <PageDown>      one screenful forward
+i_<F1>        <F1>            same as <Help>
+i_<Help>      <Help>          stop insert mode and display help window
+i_<Insert>    <Insert>        toggle Insert/Replace mode
+i_<LeftMouse> <LeftMouse>     cursor at mouse click
+i_<ScrollWheelDown>   <ScrollWheelDown>       move window three lines down
+i_<S-ScrollWheelDown> <S-ScrollWheelDown>     move window one page down
+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_<ScrollWheelRight>  <ScrollWheelRight>      move window six columns right
+i_<S-ScrollWheelRight> <S-ScrollWheelRight>   move window one page right
+
+commands in CTRL-X submode                              i_CTRL-X_index
+
+i_CTRL-X_CTRL-D       CTRL-X CTRL-D   complete defined identifiers
+i_CTRL-X_CTRL-E       CTRL-X CTRL-E   scroll up
+i_CTRL-X_CTRL-F       CTRL-X CTRL-F   complete file names
+i_CTRL-X_CTRL-I       CTRL-X CTRL-I   complete identifiers
+i_CTRL-X_CTRL-K       CTRL-X CTRL-K   complete identifiers from dictionary
+i_CTRL-X_CTRL-L       CTRL-X CTRL-L   complete whole lines
+i_CTRL-X_CTRL-N       CTRL-X CTRL-N   next completion
+i_CTRL-X_CTRL-O       CTRL-X CTRL-O   omni completion
+i_CTRL-X_CTRL-P       CTRL-X CTRL-P   previous completion
+i_CTRL-X_CTRL-S       CTRL-X CTRL-S   spelling suggestions
+i_CTRL-X_CTRL-T       CTRL-X CTRL-T   complete identifiers from thesaurus
+i_CTRL-X_CTRL-Y       CTRL-X CTRL-Y   scroll down
+i_CTRL-X_CTRL-U       CTRL-X CTRL-U   complete with 'completefunc'
+i_CTRL-X_CTRL-V       CTRL-X CTRL-V   complete like in : command line
+i_CTRL-X_CTRL-]       CTRL-X CTRL-]   complete tags
+i_CTRL-X_s            CTRL-X s        spelling suggestions
+{not available when compiled without the |+insert_expand| feature}
+
+==============================================================================
+2. Normal mode                                          normal-index
+
+CHAR     any non-blank character
+WORD     a sequence of non-blank characters
+N        a number entered before the command
+{motion} a cursor movement command
+Nmove    the text that is moved over with a {motion}
+SECTION  a section that possibly starts with '}' instead of '{'
+
+note: 1 = cursor movement command; 2 = can be undone/redone
+
+tag             char          note action in Normal mode        
+------------------------------------------------------------------------------
+                CTRL-@             not used
+CTRL-A        CTRL-A          2  add N to number at/after cursor
+CTRL-B        CTRL-B          1  scroll N screens Backwards
+CTRL-C        CTRL-C             interrupt current (search) command
+CTRL-D        CTRL-D             scroll Down N lines (default: half a screen)
+CTRL-E        CTRL-E             scroll N lines upwards (N lines Extra)
+CTRL-F        CTRL-F          1  scroll N screens Forward
+CTRL-G        CTRL-G             display current file name and position
+<BS>          <BS>            1  same as "h"
+CTRL-H        CTRL-H          1  same as "h"
+<Tab>         <Tab>           1  go to N newer entry in jump list
+CTRL-I        CTRL-I          1  same as <Tab>
+<NL>          <NL>            1  same as "j"
+CTRL-J        CTRL-J          1  same as "j"
+                CTRL-K             not used
+CTRL-L        CTRL-L             redraw screen
+<CR>          <CR>            1  cursor to the first CHAR N lines lower
+CTRL-M        CTRL-M          1  same as <CR>
+CTRL-N        CTRL-N          1  same as "j"
+CTRL-O        CTRL-O          1  go to N older entry in jump list
+CTRL-P        CTRL-P          1  same as "k"
+                CTRL-Q             (used for terminal control flow)
+CTRL-R        CTRL-R          2  redo changes which were undone with 'u'
+                CTRL-S             (used for terminal control flow)
+CTRL-T        CTRL-T             jump to N older Tag in tag list
+CTRL-U        CTRL-U             scroll N lines Upwards (default: half a
+                                   screen)
+CTRL-V        CTRL-V             start blockwise Visual mode
+CTRL-W        CTRL-W {char}      window commands, see CTRL-W
+CTRL-X        CTRL-X          2  subtract N from number at/after cursor
+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-\ a - z       reserved for extensions
+                CTRL-\ others      not used
+CTRL-]        CTRL-]             :ta to ident under cursor
+CTRL-^        CTRL-^             edit Nth alternate file (equivalent to
+                                   ":e #N")
+                CTRL-_             not used
+
+<Space>       <Space>         1  same as "l"
+!             !{motion}{filter}
+                                2  filter Nmove text through the {filter}
+                                   command
+!!            !!{filter}      2  filter N lines through the {filter} command
+quote         "{a-zA-Z0-9.%#:-"}  use register {a-zA-Z0-9.%#:-"} for next
+                                   delete, yank or put (uppercase to append)
+                                   ({.%#:} only work with put)
+#             #               1  search backward for the Nth occurrence of
+                                   the ident under the cursor
+$             $               1  cursor to the end of Nth next line
+%             %               1  find the next (curly/square) bracket on
+                                   this line and go to its match, or go to
+                                   matching comment bracket, or go to matching
+                                   preprocessor directive.
+N%            {count}%        1  go to N percentage in the file
+&             &               2  repeat last :s
+'             '{a-zA-Z0-9}    1  cursor to the first CHAR on the line with
+                                   mark {a-zA-Z0-9}
+''            ''              1  cursor to the first CHAR of the line where
+                                   the cursor was before the latest jump.
+'(            '(              1  cursor to the first CHAR on the line of the
+                                   start of the current sentence
+')            ')              1  cursor to the first CHAR on the line of the
+                                   end of the current sentence
+'<            '<              1  cursor to the first CHAR of the line where
+                                   highlighted area starts/started in the
+                                   current buffer.
+'>            '>              1  cursor to the first CHAR of the line where
+                                   highlighted area ends/ended in the current
+                                   buffer.
+'[            '[              1  cursor to the first CHAR on the line of the
+                                   start of last operated text or start of put
+                                   text
+']            ']              1  cursor to the first CHAR on the line of the
+                                   end of last operated text or end of put
+                                   text
+'{            '{              1  cursor to the first CHAR on the line of the
+                                   start of the current paragraph
+'}            '}              1  cursor to the first CHAR on the line of the
+                                   end of the current paragraph
+(             (               1  cursor N sentences backward
+)             )               1  cursor N sentences forward
+star          *               1  search forward for the Nth occurrence of
+                                   the ident under the cursor
++             +               1  same as <CR>
+,             ,               1  repeat latest f, t, F or T in opposite
+                                   direction N times
+-             -               1  cursor to the first CHAR N lines higher
+.             .               2  repeat last change with count replaced with
+                                   N
+/             /{pattern}<CR>  1  search forward for the Nth occurrence of
+                                   {pattern}
+/<CR>         /<CR>           1  search forward for {pattern} of last search
+count         0               1  cursor to the first char of the line
+count         1                  prepend to command to give a count
+count         2                       "
+count         3                       "
+count         4                       "
+count         5                       "
+count         6                       "
+count         7                       "
+count         8                       "
+count         9                       "
+:             :               1  start entering an Ex command
+N:            {count}:           start entering an Ex command with range
+                                   from current line to N-1 lines down
+;             ;               1  repeat latest f, t, F or T N times
+<             <{motion}       2  shift Nmove lines one 'shiftwidth'
+                                   leftwards
+<<            <<              2  shift N lines one 'shiftwidth' leftwards
+=             ={motion}       2  filter Nmove lines through "indent"
+==            ==              2  filter N lines through "indent"
+>             >{motion}       2  shift Nmove lines one 'shiftwidth'
+                                   rightwards
+>>            >>              2  shift N lines one 'shiftwidth' rightwards
+?             ?{pattern}<CR>  1  search backward for the Nth previous
+                                   occurrence of {pattern}
+?<CR>         ?<CR>           1  search backward for {pattern} of last search
+@             @{a-z}          2  execute the contents of register {a-z}
+                                   N times
+@:            @:                 repeat the previous ":" command N times
+@@            @@              2  repeat the previous @{a-z} N times
+A             A               2  append text after the end of the line N times
+B             B               1  cursor N WORDS backward
+C             ["x]C           2  change from the cursor position to the end
+                                   of the line, and N-1 more lines [into
+                                   register x]; synonym for "c$"
+D             ["x]D           2  delete the characters under the cursor
+                                   until the end of the line and N-1 more
+                                   lines [into register x]; synonym for "d$"
+E             E               1  cursor forward to the end of WORD N
+F             F{char}         1  cursor to the Nth occurrence of {char} to
+                                   the left
+G             G               1  cursor to line N, default last line
+H             H               1  cursor to line N from top of screen
+I             I               2  insert text before the first CHAR on the
+                                   line N times
+J             J               2  Join N lines; default is 2
+K             K                  lookup Keyword under the cursor with
+                                   'keywordprg'
+L             L               1  cursor to line N from bottom of screen
+M             M               1  cursor to middle line of screen
+N             N               1  repeat the latest '/' or '?' N times in
+                                   opposite direction
+O             O               2  begin a new line above the cursor and
+                                   insert text, repeat N times
+P             ["x]P           2  put the text [from register x] before the
+                                   cursor N times
+Q             Q                  switch to "Ex" mode
+R             R               2  enter replace mode: overtype existing
+                                   characters, repeat the entered text N-1
+                                   times
+S             ["x]S           2  delete N lines [into register x] and start
+                                   insert; synonym for "cc".
+T             T{char}         1  cursor till after Nth occurrence of {char}
+                                   to the left
+U             U               2  undo all latest changes on one line
+V             V                  start linewise Visual mode
+W             W               1  cursor N WORDS forward
+X             ["x]X           2  delete N characters before the cursor [into
+                                   register x]
+Y             ["x]Y              yank N lines [into register x]; synonym for
+                                   "yy"
+ZZ            ZZ                 store current file if modified, and exit
+ZQ            ZQ                 exit current file always
+[             [{char}            square bracket command (see [ below)
+                \                  not used
+]             ]{char}            square bracket command (see ] below)
+^             ^               1  cursor to the first CHAR of the line
+_             _               1  cursor to the first CHAR N - 1 lines lower
+`             `{a-zA-Z0-9}    1  cursor to the mark {a-zA-Z0-9}
+`(            `(              1  cursor to the start of the current sentence
+`)            `)              1  cursor to the end of the current sentence
+`<            `<              1  cursor to the start of the highlighted area
+`>            `>              1  cursor to the end of the highlighted area
+`[            `[              1  cursor to the start of last operated text
+                                   or start of putted text
+`]            `]              1  cursor to the end of last operated text or
+                                   end of putted text
+``            ``              1  cursor to the position before latest jump
+`{            `{              1  cursor to the start of the current paragraph
+`}            `}              1  cursor to the end of the current paragraph
+a             a               2  append text after the cursor N times
+b             b               1  cursor N words backward
+c             ["x]c{motion}   2  delete Nmove text [into register x] and
+                                   start insert
+cc            ["x]cc          2  delete N lines [into register x] and start
+                                   insert
+d             ["x]d{motion}   2  delete Nmove text [into register x]
+dd            ["x]dd          2  delete N lines [into register x]
+do            do              2  same as ":diffget"
+dp            dp              2  same as ":diffput"
+e             e               1  cursor forward to the end of word N
+f             f{char}         1  cursor to Nth occurrence of {char} to the
+                                   right
+g             g{char}            extended commands, see g below
+h             h               1  cursor N chars to the left
+i             i               2  insert text before the cursor N times
+j             j               1  cursor N lines downward
+k             k               1  cursor N lines upward
+l             l               1  cursor N chars to the right
+m             m{A-Za-z}          set mark {A-Za-z} at cursor position
+n             n               1  repeat the latest '/' or '?' N times
+o             o               2  begin a new line below the cursor and
+                                   insert text, repeat N times
+p             ["x]p           2  put the text [from register x] after the
+                                   cursor N times
+q             q{0-9a-zA-Z"}      record typed characters into named register
+                                   {0-9a-zA-Z"} (uppercase to append)
+q             q                  (while recording) stops recording
+q:            q:                 edit : command-line in command-line window
+q/            q/                 edit / command-line in command-line window
+q?            q?                 edit ? command-line in command-line window
+r             r{char}         2  replace N chars with {char}
+s             ["x]s           2  (substitute) delete N characters [into
+                                   register x] and start insert
+t             t{char}         1  cursor till before Nth occurrence of {char}
+                                   to the right
+u             u               2  undo changes
+v             v                  start characterwise Visual mode
+w             w               1  cursor N words forward
+x             ["x]x           2  delete N characters under and after the
+                                   cursor [into register x]
+y             ["x]y{motion}      yank Nmove text [into register x]
+yy            ["x]yy             yank N lines [into register x]
+z             z{char}            commands starting with 'z', see z below
+{             {               1  cursor N paragraphs backward
+bar           |               1  cursor to column N
+}             }               1  cursor N paragraphs forward
+~             ~               2  'tildeop' off: switch case of N characters
+                                   under cursor and move the cursor N
+                                   characters to the right
+~             ~{motion}          'tildeop' on: switch case of Nmove text
+<C-End>       <C-End>         1  same as "G"
+<C-Home>      <C-Home>        1  same as "gg"
+<C-Left>      <C-Left>        1  same as "b"
+<C-LeftMouse> <C-LeftMouse>      ":ta" to the keyword at the mouse click
+<C-Right>     <C-Right>       1  same as "w"
+<C-RightMouse> <C-RightMouse>    same as "CTRL-T"
+<Del>         ["x]<Del>       2  same as "x"
+N<Del>        {count}<Del>       remove the last digit from {count}
+<Down>        <Down>          1  same as "j"
+<End>         <End>           1  same as "$"
+<F1>          <F1>               same as <Help>
+<Help>        <Help>             open a help window
+<Home>        <Home>          1  same as "0"
+<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
+<PageDown>    <PageDown>         same as CTRL-F
+<PageUp>      <PageUp>           same as CTRL-B
+<Right>       <Right>         1  same as "l"
+<RightMouse>  <RightMouse>       start Visual mode, move cursor to the mouse
+                                   click position
+<S-Down>      <S-Down>        1  same as CTRL-F
+<S-Left>      <S-Left>        1  same as "b"
+<S-LeftMouse> <S-LeftMouse>      same as "*" at the mouse click position
+<S-Right>     <S-Right>       1  same as "w"
+<S-RightMouse> <S-RightMouse>    same as "#" at the mouse click position
+<S-Up>        <S-Up>          1  same as CTRL-B
+<Undo>        <Undo>          2  same as "u"
+<Up>          <Up>            1  same as "k"
+<ScrollWheelDown>     <ScrollWheelDown>       move window three lines down
+<S-ScrollWheelDown>   <S-ScrollWheelDown>     move window one page down
+<ScrollWheelUp>       <ScrollWheelUp>         move window three lines up
+<S-ScrollWheelUp>     <S-ScrollWheelUp>       move window one page up
+<ScrollWheelLeft>     <ScrollWheelLeft>       move window six columns left
+<S-ScrollWheelLeft>   <S-ScrollWheelLeft>     move window one page left
+<ScrollWheelRight>    <ScrollWheelRight>      move window six columns right
+<S-ScrollWheelRight>  <S-ScrollWheelRight>    move window one page right
+
+==============================================================================
+2.1 Text objects                                                objects
+
+These can be used after an operator or in Visual mode to select an object.
+
+tag             command            action in op-pending and Visual mode 
+------------------------------------------------------------------------------
+v_aquote      a"                 double quoted string
+v_a'          a'                 single quoted string
+v_a(          a(                 same as ab
+v_a)          a)                 same as ab
+v_a<          a<                 "a <>" from '<' to the matching '>'
+v_a>          a>                 same as a<
+v_aB          aB                 "a Block" from "[{" to "]}" (with brackets)
+v_aW          aW                 "a WORD" (with white space)
+v_a[          a[                 "a []" from '[' to the matching ']'
+v_a]          a]                 same as a[
+v_a`          a`                 string in backticks
+v_ab          ab                 "a block" from "[(" to "])" (with braces)
+v_ap          ap                 "a paragraph" (with white space)
+v_as          as                 "a sentence" (with white space)
+v_at          at                 "a tag block" (with white space)
+v_aw          aw                 "a word" (with white space)
+v_a{          a{                 same as aB
+v_a}          a}                 same as aB
+v_iquote      i"                 double quoted string without the quotes
+v_i'          i'                 single quoted string without the quotes
+v_i(          i(                 same as ib
+v_i)          i)                 same as ib
+v_i<          i<                 "inner <>" from '<' to the matching '>'
+v_i>          i>                 same as i<
+v_iB          iB                 "inner Block" from "[{" and "]}"
+v_iW          iW                 "inner WORD"
+v_i[          i[                 "inner []" from '[' to the matching ']'
+v_i]          i]                 same as i[
+v_i`          i`                 string in backticks without the backticks
+v_ib          ib                 "inner block" from "[(" to "])"
+v_ip          ip                 "inner paragraph"
+v_is          is                 "inner sentence"
+v_it          it                 "inner tag block"
+v_iw          iw                 "inner word"
+v_i{          i{                 same as iB
+v_i}          i}                 same as iB
+
+==============================================================================
+2.2 Window commands                                             CTRL-W
+
+tag             command            action in Normal mode        
+------------------------------------------------------------------------------
+CTRL-W_CTRL-B CTRL-W CTRL-B      same as "CTRL-W b"
+CTRL-W_CTRL-C CTRL-W CTRL-C      same as "CTRL-W c"
+CTRL-W_CTRL-D CTRL-W CTRL-D      same as "CTRL-W d"
+CTRL-W_CTRL-F CTRL-W CTRL-F      same as "CTRL-W f"
+                CTRL-W CTRL-G      same as "CTRL-W g .."
+CTRL-W_CTRL-H CTRL-W CTRL-H      same as "CTRL-W h"
+CTRL-W_CTRL-I CTRL-W CTRL-I      same as "CTRL-W i"
+CTRL-W_CTRL-J CTRL-W CTRL-J      same as "CTRL-W j"
+CTRL-W_CTRL-K CTRL-W CTRL-K      same as "CTRL-W k"
+CTRL-W_CTRL-L CTRL-W CTRL-L      same as "CTRL-W l"
+CTRL-W_CTRL-N CTRL-W CTRL-N      same as "CTRL-W n"
+CTRL-W_CTRL-O CTRL-W CTRL-O      same as "CTRL-W o"
+CTRL-W_CTRL-P CTRL-W CTRL-P      same as "CTRL-W p"
+CTRL-W_CTRL-Q CTRL-W CTRL-Q      same as "CTRL-W q"
+CTRL-W_CTRL-R CTRL-W CTRL-R      same as "CTRL-W r"
+CTRL-W_CTRL-S CTRL-W CTRL-S      same as "CTRL-W s"
+CTRL-W_CTRL-T CTRL-W CTRL-T      same as "CTRL-W t"
+CTRL-W_CTRL-V CTRL-W CTRL-V      same as "CTRL-W v"
+CTRL-W_CTRL-W CTRL-W CTRL-W      same as "CTRL-W w"
+CTRL-W_CTRL-X CTRL-W CTRL-X      same as "CTRL-W x"
+CTRL-W_CTRL-Z CTRL-W CTRL-Z      same as "CTRL-W z"
+CTRL-W_CTRL-] CTRL-W CTRL-]      same as "CTRL-W ]"
+CTRL-W_CTRL-^ CTRL-W CTRL-^      same as "CTRL-W ^"
+CTRL-W_CTRL-_ CTRL-W CTRL-_      same as "CTRL-W _"
+CTRL-W_quote  CTRL-W "           terminal window: paste register
+CTRL-W_+      CTRL-W +           increase current window height N lines
+CTRL-W_-      CTRL-W -           decrease current window height N lines
+CTRL-W_.      CTRL-W .           terminal window: type CTRL-W
+CTRL-W_:      CTRL-W :           same as :, edit a command line
+CTRL-W_<      CTRL-W <           decrease current window width N columns
+CTRL-W_=      CTRL-W =           make all windows the same height & width
+CTRL-W_>      CTRL-W >           increase current window width N columns
+CTRL-W_H      CTRL-W H           move current window to the far left
+CTRL-W_J      CTRL-W J           move current window to the very bottom
+CTRL-W_K      CTRL-W K           move current window to the very top
+CTRL-W_L      CTRL-W L           move current window to the far right
+CTRL-W_N      CTRL-W N           terminal window: go to Terminal Normal mode
+CTRL-W_P      CTRL-W P           go to preview window
+CTRL-W_R      CTRL-W R           rotate windows upwards N times
+CTRL-W_S      CTRL-W S           same as "CTRL-W s"
+CTRL-W_T      CTRL-W T           move current window to a new tab page
+CTRL-W_W      CTRL-W W           go to N previous window (wrap around)
+CTRL-W_]      CTRL-W ]           split window and jump to tag under cursor
+CTRL-W_^      CTRL-W ^           split current window and edit alternate
+                                   file N
+CTRL-W__      CTRL-W _           set current window height to N (default:
+                                   very high)
+CTRL-W_b      CTRL-W b           go to bottom window
+CTRL-W_c      CTRL-W c           close current window (like :close)
+CTRL-W_d      CTRL-W d           split window and jump to definition under
+                                   the cursor
+CTRL-W_f      CTRL-W f           split window and edit file name under the
+                                   cursor
+CTRL-W_F      CTRL-W F           split window and edit file name under the
+                                   cursor and jump to the line number
+                                   following the file name.
+CTRL-W_g_CTRL-] CTRL-W g CTRL-]  split window and do :tjump to tag under
+                                   cursor
+CTRL-W_g]     CTRL-W g ]         split window and do :tselect for tag
+                                   under cursor
+CTRL-W_g}     CTRL-W g }         do a :ptjump to the tag under the cursor
+CTRL-W_gf     CTRL-W g f         edit file name under the cursor in a new
+                                   tab page
+CTRL-W_gF     CTRL-W g F         edit file name under the cursor in a new
+                                   tab page and jump to the line number
+                                   following the file name.
+CTRL-W_h      CTRL-W h           go to Nth left window (stop at first window)
+CTRL-W_i      CTRL-W i           split window and jump to declaration of
+                                   identifier under the cursor
+CTRL-W_j      CTRL-W j           go N windows down (stop at last window)
+CTRL-W_k      CTRL-W k           go N windows up (stop at first window)
+CTRL-W_l      CTRL-W l           go to Nth right window (stop at last window)
+CTRL-W_n      CTRL-W n           open new window, N lines high
+CTRL-W_o      CTRL-W o           close all but current window (like :only)
+CTRL-W_p      CTRL-W p           go to previous (last accessed) window
+CTRL-W_q      CTRL-W q           quit current window (like :quit)
+CTRL-W_r      CTRL-W r           rotate windows downwards N times
+CTRL-W_s      CTRL-W s           split current window in two parts, new
+                                   window N lines high
+CTRL-W_t      CTRL-W t           go to top window
+CTRL-W_v      CTRL-W v           split current window vertically, new window
+                                   N columns wide
+CTRL-W_w      CTRL-W w           go to N next window (wrap around)
+CTRL-W_x      CTRL-W x           exchange current window with window N
+                                   (default: next window)
+CTRL-W_z      CTRL-W z           close preview window
+CTRL-W_bar    CTRL-W |           set window width to N columns
+CTRL-W_}      CTRL-W }           show tag under cursor in preview window
+CTRL-W_<Down> CTRL-W <Down>      same as "CTRL-W j"
+CTRL-W_<Up>   CTRL-W <Up>        same as "CTRL-W k"
+CTRL-W_<Left> CTRL-W <Left>      same as "CTRL-W h"
+CTRL-W_<Right> CTRL-W <Right>    same as "CTRL-W l"
+
+==============================================================================
+2.3 Square bracket commands                                     [ ]
+
+tag             char          note action in Normal mode        
+------------------------------------------------------------------------------
+[_CTRL-D      [ CTRL-D           jump to first #define found in current and
+                                   included files matching the word under the
+                                   cursor, start searching at beginning of
+                                   current file
+[_CTRL-I      [ CTRL-I           jump to first line in current and included
+                                   files that contains the word under the
+                                   cursor, start searching at beginning of
+                                   current file
+[#            [#              1  cursor to N previous unmatched #if, #else
+                                   or #ifdef
+['            ['              1  cursor to previous lowercase mark, on first
+                                   non-blank
+[(            [(              1  cursor N times back to unmatched '('
+[star         [*              1  same as "[/"
+[`            [`              1  cursor to previous lowercase mark
+[/            [/              1  cursor to N previous start of a C comment
+[D            [D                 list all defines found in current and
+                                   included files matching the word under the
+                                   cursor, start searching at beginning of
+                                   current file
+[I            [I                 list all lines found in current and
+                                   included files that contain the word under
+                                   the cursor, start searching at beginning of
+                                   current file
+[P            [P              2  same as "[p"
+[[            [[              1  cursor N sections backward
+[]            []              1  cursor N SECTIONS backward
+[c            [c              1  cursor N times backwards to start of change
+[d            [d                 show first #define found in current and
+                                   included files matching the word under the
+                                   cursor, start searching at beginning of
+                                   current file
+[f            [f                 same as "gf"
+[i            [i                 show first line found in current and
+                                   included files that contains the word under
+                                   the cursor, start searching at beginning of
+                                   current file
+[m            [m              1  cursor N times back to start of member
+                                   function
+[p            [p              2  like "P", but adjust indent to current line
+[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"
+
+]_CTRL-D      ] CTRL-D           jump to first #define found in current and
+                                   included files matching the word under the
+                                   cursor, start searching at cursor position
+]_CTRL-I      ] CTRL-I           jump to first line in current and included
+                                   files that contains the word under the
+                                   cursor, start searching at cursor position
+]#            ]#              1  cursor to N next unmatched #endif or #else
+]'            ]'              1  cursor to next lowercase mark, on first
+                                   non-blank
+])            ])              1  cursor N times forward to unmatched ')'
+]star         ]*              1  same as "]/"
+]`            ]`              1  cursor to next lowercase mark
+]/            ]/              1  cursor to N next end of a C comment
+]D            ]D                 list all #defines found in current and
+                                   included files matching the word under the
+                                   cursor, start searching at cursor position
+]I            ]I                 list all lines found in current and
+                                   included files that contain the word under
+                                   the cursor, start searching at cursor
+                                   position
+]P            ]P              2  same as "[p"
+][            ][              1  cursor N SECTIONS forward
+]]            ]]              1  cursor N sections forward
+]c            ]c              1  cursor N times forward to start of change
+]d            ]d                 show first #define found in current and
+                                   included files matching the word under the
+                                   cursor, start searching at cursor position
+]f            ]f                 same as "gf"
+]i            ]i                 show first line found in current and
+                                   included files that contains the word under
+                                   the cursor, start searching at cursor
+                                   position
+]m            ]m              1  cursor N times forward to end of member
+                                   function
+]p            ]p              2  like "p", but adjust indent to current line
+]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"
+
+==============================================================================
+2.4 Commands starting with 'g'                                          g
+
+tag             char          note action in Normal mode        
+------------------------------------------------------------------------------
+g_CTRL-A      g CTRL-A           only when compiled with MEM_PROFILE
+                                   defined: dump a memory profile
+g_CTRL-G      g CTRL-G           show information about current cursor
+                                   position
+g_CTRL-H      g CTRL-H           start Select block mode
+g_CTRL-]      g CTRL-]           :tjump to the tag under the cursor
+g#            g#              1  like "#", but without using "\<" and "\>"
+g$            g$              1  when 'wrap' off go to rightmost character of
+                                   the current line that is on the screen;
+                                   when 'wrap' on go to the rightmost character
+                                   of the current screen line
+g&            g&              2  repeat last ":s" on all lines
+g'            g'{mark}        1  like ' but without changing the jumplist
+g`            g`{mark}        1  like ` but without changing the jumplist
+gstar         g*              1  like "*", but without using "\<" and "\>"
+g+            g+                 go to newer text state N times
+g,            g,              1  go to N newer position in change list
+g-            g-                 go to older text state N times
+g0            g0              1  when 'wrap' off go to leftmost character of
+                                   the current line that is on the screen;
+                                   when 'wrap' on go to the leftmost character
+                                   of the current screen line
+g8            g8                 print hex value of bytes used in UTF-8
+                                   character under the cursor
+g;            g;              1  go to N older position in change list
+g<            g<                 display previous command output
+g?            g?              2  Rot13 encoding operator
+g?g?          g??             2  Rot13 encode current line
+g?g?          g?g?            2  Rot13 encode current line
+gD            gD              1  go to definition of word under the cursor
+                                   in current file
+gE            gE              1  go backwards to the end of the previous
+                                   WORD
+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
+                                   mode
+g]            g]                 :tselect on the tag under the cursor
+g^            g^              1  when 'wrap' off go to leftmost non-white
+                                   character of the current line that is on
+                                   the screen; when 'wrap' on go to the
+                                   leftmost non-white character of the current
+                                   screen line
+g_            g_              1  cursor to the last CHAR N - 1 lines lower
+ga            ga                 print ascii value of character under the
+                                   cursor
+gd            gd              1  go to definition of word under the cursor
+                                   in current function
+ge            ge              1  go backwards to the end of the previous
+ @@ Diff output truncated at 100000 characters. @@

--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).


More information about the Plugins-Commits mailing list