Branch: refs/heads/master
Author: Jiří Techet <techet(a)gmail.com>
Committer: Jiří Techet <techet(a)gmail.com>
Date: Fri, 20 Apr 2018 17:13:55 UTC
Commit: 7eede302ecedce6f2e3a0e28f0c3ee71117eaeb3
https://github.com/geany/geany-plugins/commit/7eede302ecedce6f2e3a0e28f0c3e…
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(a)frank.uvena.de>
W: http://plugins.geany.org/updatechecker.html
S: Maintained
+vimode
+P: Jiří Techet <techet(a)gmail.com>
+g: @techee
+M: Jiří Techet <techet(a)gmail.com>
+W: http://plugins.geany.org/vimode.html
+S: Maintained
+
webhelper
P: Colomban Wendling <ban(a)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(a)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).
Branch: refs/heads/master
Author: Jiří Techet <techet(a)gmail.com>
Committer: Jiří Techet <techet(a)gmail.com>
Date: Sat, 21 Apr 2018 21:06:00 UTC
Commit: 46102a8a674716aa4dbb6b324dd100a90dd32a2f
https://github.com/geany/geany-plugins/commit/46102a8a674716aa4dbb6b324dd10…
Log Message:
-----------
vimode: Only ignore key presses containing Alt
The previous mask was too restrictive and didn't contain GDK_MOD2_MASK
used for numlock. To avoid similar problems in the future, ignore only
Alt keypresses.
Modified Paths:
--------------
vimode/src/keypress.c
Modified: vimode/src/keypress.c
4 lines changed, 2 insertions(+), 2 deletions(-)
===================================================================
@@ -23,10 +23,10 @@
KeyPress *kp_from_event_key(GdkEventKey *ev)
{
- guint mask = GDK_MODIFIER_MASK & ~(GDK_SHIFT_MASK | GDK_LOCK_MASK | GDK_CONTROL_MASK);
KeyPress *kp;
- if (ev->state & mask)
+ /* ignore keypresses containing Alt - no Vim command uses it */
+ if (ev->state & GDK_MOD1_MASK)
return NULL;
switch (ev->keyval)
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
Branch: refs/heads/master
Author: Frank Lanitz <frank(a)frank.uvena.de>
Committer: GitHub <noreply(a)github.com>
Date: Mon, 28 May 2018 18:12:08 UTC
Commit: 1a575ee1b18070b9b6af4cae93d59b2f252cf5c7
https://github.com/geany/geany-plugins/commit/1a575ee1b18070b9b6af4cae93d59…
Log Message:
-----------
Merge pull request #735 from techee/vim
vimode: A Vim Mode for Geany
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(a)frank.uvena.de>
W: http://plugins.geany.org/updatechecker.html
S: Maintained
+vimode
+P: Jiří Techet <techet(a)gmail.com>
+g: @techee
+M: Jiří Techet <techet(a)gmail.com>
+W: http://plugins.geany.org/vimode.html
+S: Maintained
+
webhelper
P: Colomban Wendling <ban(a)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(a)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).