Branch: refs/heads/master Author: Jiřà Techet techet@gmail.com Committer: Jiřà Techet techet@gmail.com Date: Fri, 20 Apr 2018 17:13:55 UTC Commit: 7eede302ecedce6f2e3a0e28f0c3ee71117eaeb3 https://github.com/geany/geany-plugins/commit/7eede302ecedce6f2e3a0e28f0c3ee...
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@frank.uvena.de W: http://plugins.geany.org/updatechecker.html S: Maintained
+vimode +P: Jiřà Techet techet@gmail.com +g: @techee +M: Jiřà Techet techet@gmail.com +W: http://plugins.geany.org/vimode.html +S: Maintained + webhelper P: Colomban Wendling ban@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@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).