Download
Update Site
Stable: http://vrapper.sourceforge.net/update-site/stable
Unstable: http://vrapper.sourceforge.net/update-site/unstable
File Releases
About
Vrapper is an Eclipse plugin which acts as a wrapper for Eclipse text editors to provide a Vim-like input scheme for moving around and editing text.
Unlike other plugins which embed Vim in Eclipse, Vrapper imitates the behaviour of Vim while still using whatever editor you have opened in the workbench. The goal is to have the comfort and ease which comes with the different modes, complex commands and count/operator/motion combinations which are the key features behind editing with Vim, while preserving the powerful features of the different Eclipse text editors, like code generation and refactoring.
Vrapper tries to offer Eclipse users the best of both worlds.
Development
Development of Vrapper has moved to our GitHub project at:
https://github.com/vrapper/vrapper
GitHub makes it much easier for contributors to submit code changes, bug fixes, and new features. If you'd like to contribute to Vrapper just initiate a Pull Request on our GitHub project.
The SourceForge project will remain active because it hosts our website, bug tracker, wiki, forums, direct file downloads, and Eclipse update site. The Git repository on SourceForge will only contain the state of the code for the most recent stable release. Basically, everything other than actively developed code is still on SourceForge.
If you'd like to contribute to Vrapper but need some help, here are a couple Developer Wiki pages we've put together:
Developer Wiki
News
Updates to unstable update site
I've hit my stride with a two-month release cycle so I'm also trying to make a habit of posting status updates once a month. In addition to the usual requests for more Vim features, in the last month I received a couple requests for features which aren't in Vim but our users wanted anyway.
The unstable update site currently has the following changes:
- Add support for '\c' and '\C' in search to temporarily override ignorecase setting
- Add support for '_' motion
- Add support for ':e!' to revert file
- Add support for "0-"9 and "- delete and yank registers
- Add support for ':maximize' command to maximize editor area
- Add support for ':copy' and ':move' operations
- Useful with line range operations ':10,20 copy 140'
- Add support for ':vim' command
- Launches current file in gvim (so you can do things Vrapper doesn't support)
- After saving and quitting gvim, Eclipse will reload the file
- Path to gvim is defined by 'gvimpath' property (defaults to /usr/bin/gvim)
- Refactored XML text object parsing to be more compliant with Vim
0.30.0 Released
Looks like I'm hitting my stride with a two-month release cycle. 0.30.0 is released and ready for use. There were only a few changes since my last update which were included in this release:
- Added support for :retab operation
- Added support for partial command-line names
- e.g., :tabprev, :tabpre, :tabpr, etc. all work now
- Reimplemented paragraph text objects to match Vim's behavior
The partial command-line names work pretty well as long as there isn't a name collision. For example, ':tabne' could be ':tabnew' or ':tabnext'. Vim has some way to define precedence but Vrapper will just fail when this happens. I think the current solution should work in most cases but there will be a couple places where you may still need to be explicit with the name. Either way, this is an improvement over the previous implementation which required me to explicitly define every partial name supported. Now I only need to explicitly define the collisions like ':tabn' going to ':tabnext'.
Also, as I mentioned in my previous post, there was a lot of code submitted by contributors this release. I'm glad people are willing to help me out and constantly improve Vrapper. Thank you for helping to keep this project alive!
More updates to unstable update site
It's been over a month since my last update so I decided to look through our commit log and see what we've been working on lately. Here is the list of changes to the unstable update site since my last news post:
- Added support for '**' in path variable
- e.g., :set path=src/main/java/**
- Tells :find to search all subdirectories for a filename
- Added support for :source
- You can now "source .vimrc" in your .vrapperrc
- Added support for 'cursorline' option
- enable/disable highlighting line with cursor
- Create new file when ":e <filename>" doesn't exist
- Added support for :tabonly (alias of :only)
- Added support for :tabf (alias of :find)
- Allow '+' to be omitted in line range operations
- ".5" == ".+5"
- Fixed behavior with quote text objects to match Vim's behavior
- ci" will only look for quotes on current line now
- Fixed issue with escaping delimiter character in substitution
- Fixed a couple defects in sentence motions, paragraph motions, and joining multiple lines
I've received a lot of help from contributors in this last month, which makes me feel like things are moving quickly. I still think a two-month release cycle works well for us though, so I'll probably wait until the end of March to release this next version.
Updates to unstable update site
When I released 0.28.0 a couple days ago I mentioned that I wanted to release it mostly because I had a pile of feature requests I was itching to work on. Well, it's less than a week later and I've already got a bunch of new features available on the unstable update site. They are:
- Add support for '(' and ')' sentence motions
- Add support for Shift key in mappings '<S-' (e.g., <S-Left>)
- Add support for Alt (meta) key in mappings '<A-' and '<M-' (e.g., <A-x>)
- Add support for 'g;' and 'g,' to traverse changelist
- Add support for `` to jump to last cursor position
- Similar to '' to jump to last line position
- Fix issue where modifying text above a mark would offset that mark's position
- Mark positions should now stay accurate as the document changes
It's been a productive couple of days.
0.28.0 Released
The code stayed relatively idle for the last couple weeks so I'm releasing 0.28.0. It includes all the changes listed in the previous news post along with a few other minor changes:
- Added support for :bd, :bp, :bn, and :ls
- Added basic support for 'g;'
- Only goes to previous edit location, no change lists
- Fixed off-by-one issue with cursor position after exiting VisualMode
We have a pile of new feature requests that I'm itching to work on so I wanted to get 0.28.0 out into the world before I start making some destabilizing changes.
Finally, I like to use my release announcements to include a little bit of shameless self-congratulation. Vrapper has gone 7 consecutive months with 800+ installs via the Eclipse Marketplace in each month! There have been a couple months where we almost cracked 1,000 installs in a single month but it hasn't happened yet. This means Vrapper is holding its place at #50 for installs across all 1,500 Eclipse plugins available via the Marketplace! I think that's pretty impressive.
Updates to Unstable Update Site
I've received a lot of help from a contributor in the last couple weeks so a lot of minor features have been added as he learns the code. I'm hoping to release the next stable version at the end of January since it appears I've hit my stride with a two-month release cycle.
The unstable update site has been updated with the following changes since 0.26.1:
- Added optional PyDev plugin for Python Vrapper users
- Added support for <C-a> and <C-x> increment/decrement operations
- Added support for :only
- Added support for :tabnext and :tabprevious
- Added support for :tabnew (invokes Eclipse's New File dialog)
- Added support for :update (performs :w)
- Added support for :ascii and 'ga'
- Added support for :qall and :wqall
- This throws a benign NullPointerException which I can't figure out
- Added basic support for :sort
- supports '!', 'i', 'n', 'x', 'o', 'u' flags
- supports /pattern/ with strings only (no regex)
- Shift+Insert will now paste clipboard contents in CommandLineMode
- Fixed problem with multi-character operations whose first character was also used in a mapping
As with all Ctrl key bindings in Vrapper, you have to unbind those keys in Eclipse first for Vrapper to receive them. The same is true of Shift+Insert since Eclipse has a mapping for that too.
Experimental Optional PyDev Plugin Created
Vrapper has a couple optional plugins to provide support for some Vim commands which require knowledge of the underlying programming language. So far, we only had plugins for Java (JDT) and C/C++ (CDT). I realized today that it would be trivial to create an optional plugin for PyDev support and a couple people might actually appreciate it. So I've created an optional PyDev Vrapper plugin and tossed it up on the unstable update site for testing.
The PyDev plugin only provides a couple extra commands (similar to our JDT and CDT plugins):
- Ctrl+], gd, gD = Go To Declaration
- gR = Rename Element
- gc<text object> = Toggle Comment
- gcc = Toggle Comment (current line)
- gc also works in visual mode
So there you have it. Not a whole lot of extra features but some people might find use for them while writing Python. Give it a try and hopefully it will become stable enough to include in the next release of Vrapper!
0.26.1 Rushed out the door
I released 0.26.0 last week but today I found a defect re-introduced that a lot of people had issues with the first time around. So I've rushed a 0.26.1 release in the hopes of delivering a fix before anyone noticed I re-introduced that defect.
The problem was with multi-character mappings while in Eclipse's SmartInsert mode. A surprising number of people use mappings like "imap jj <ESC>" for exiting insert mode. There was a long-standing defect where entering the first character 'j' while inside parentheses, and not completing the mapping, would jump the cursor in front of that first 'j'. So if you had the 'jj' mapping and typed something innocuous like "for(int j=0;" you would end up with "for(int =0;j)".
The root of the issue is with Eclipse helpfully inserting that closing ')' for you. It somehow throws off Vrapper and offsets the cursor. This means I can't unit test it because it needs Eclipse interjecting itself for the defect to occur. Which means it's easy to miss if I re-introduce it.
So anyway, defect re-introduced, defect re-fixed (I hope).
0.26.0 Released
I made a couple more fixes and features since my last news post. I feel pretty confident in those changes and I don't have anything else to work on so I'm releasing a new version of Vrapper.
In addition to the file-opening operations described in the previous post, I've made the following changes:
- Added support for Ctrl+W (delete word) in command-line modes
- Added support for softtabstop setting
- Added support for gd and gD in CDT and JDT plugins
- Go to declaration, same as Ctrl+] in those plugins
- Added ability to map function keys (F1-F20)
- Display "X substitutions on Y lines" after a multi-line substitution
- Fixed backspace in replace mode
- Fixed single-character mappings in insert mode
- Fixed '' (return to previous position) after jumping to a declaration (CDT/JDT only)
- Fixed cursor position after yanking visually-selected text
And now for some shameless self-congratulation. Vrapper appears to be pretty popular. We now have over 10,000 installs via the Eclipse Marketplace! Also, our GitHub Project has been "starred" by over 250 users and has 40 forks. Very impressive. I take this as a sign that we're doing a good job. I'm glad everyone continues to enjoy Vrapper!
Updates to Unstable Update Site
I've updated the unstable update site with a few new features. Someone made an innocent feature request for the 'gf' command and I ended up implementing a bunch of features related to opening files. These features can be broken into two categories, the ':e' operations and the ':find' operations.
- :e operations
- :e <filename> - opens a file relative to current working directory
- :cd <directory> - changes current working directory
- :pwd - prints current working directory
- :set autochdir - automatically change working directory to the parent of whatever file is active
- :find operations
- :find <filename> - opens a file from a directory in the path
- :set path=<comma-delimited list of dirs> - list of directories to search in path
- gf - takes filename under cursor, finds it in path, and opens the file
- v_gf - similar to gf but takes the current visual selection as the filename
There are a couple things to note about my implementation. I see Vrapper as an Eclipse plugin and not a generic Vim replacement so each 'path' and 'current working directory' is rooted at the Eclipse Project root of whatever file is active. For example, ':e src/main/java/Foo.java'. So, if you have two files open from two different projects then the project directories searched will depend on which file is active when you enter command-line mode.
I don't plan on ever searching absolute paths on the filesystem, but if people don't like being rooted at the Eclipse Project level I could be convinced to go up one level further so you could specify the Eclipse Project name as the first-level directory. For example, ':e MyProject/src/main/java/Foo.java'.
Finally, ':e', ':find', and ':cd' all support tab-completion like in Vim. I'm hoping to also add tab-completion for command-line command names but I haven't done that yet.
0.24.0 Released
I don't like sitting on unreleased features when I'm not working on anything new. If I have a list of things completed but none of them are major, there's nothing that says I can't release them into the world. So, I am now releasing version 0.24.0 of Vrapper. This is mostly a minor bug fix release but since I have nothing pending right now, I might as well give you what I have.
In addition to the miscellaneous bug fixes and minor features listed in my previous news post, I've added the following changes:
- Refactored Ctrl+u/Ctrl+d to scroll by half-screen, not fullscreen
- Add support for '?' on all command-line options, not just booleans.
- For example, ':set textwidth?' or ':set clipboard?' to see current value.
- In our optional Surround plugin, added support for 'yss' to surround entire line
That's a pretty short list of changes in the month since my last news post. It feels like things are slowing down here. The only major features left pending are the ones I don't feel confident implementing myself (see the previous news post about my inadequacies with the Eclipse API). I'll still do my best to fix any defects that may arise, but I have nothing new on the horizon. Other than that, hurray! A new release!
Current state of the Unstable update site
Things have been pretty slow here since releasing 0.22.0. As far as I can tell, the only major features Vrapper has left to implement are visual block selection and split editor views. Unfortunately, both those features rely heavily on poking and prodding the Eclipse API just right and I haven't yet found the magical incantation to do either one of them. I'm afraid I'll need outside help if I'm ever going to get those features working.
With that said, I have found time to fix/implement a couple things in between sessions of banging my head against the Eclipse API. The unstable update site currently has the following changes from 0.22.0:
- Fixed multi-character mappings to <ESC> when inside parentheses
- Vrapper now displays pending characters when typing multi-character mappings
- This is more aligned with Vim behavior and appears to work in all cases now
- Fixed behavior of >i{ to match Vim
- Preserve counts sent to '.' command for future '.' executions
- Fixed '*' and '#' when regexsearch is enabled.
- Added support for '+' and '-' line motions
- Fixed issue with exiting InsertMode at the end of a file
- Added support for 'gq' paragraph formatting
- Refactored 'gt' and 'gT' commands for Eclipse Juno
- 'gt' and 'gT' should work correctly but '<number>gt' still doesn't work
- 'gt' and 'gT' in Eclipse 3.x should still work but it won't wrap around the first and last tabs anymore
- Fixed issue with newline characters being shared between editors
- If you open both a Unix file and a Windows file Vrapper will keep the newlines straight
- Defined behavior for the <END> key
- You'll need to unbind <END> in Eclipse before using it in Vrapper operations
I don't think any of those changes are very big so I'm not itching to release the next version of Vrapper. We'll see what else I can add in the near future. If things remain slow and no defects arrive, I might release it.
0.22.0 Released
Aside from a couple minor defect fixes, the code was idle for the last 2 weeks. So, I'm releasing 0.22.0. There are still a couple defects I'd like fixed, but I want to get 0.22.0 out now for a couple reasons. First, I want to get the substitution feature out to everyone that has been waiting so patiently for it. Second (and probably more importantly), version 0.20.0 throws a nasty stack trace during startup in Eclipse Juno (4.2) which leaves Vrapper in a weird state. I fixed that issue in 0.22.0 so Vrapper will start correctly in Ecipse Juno for anyone who has already upgraded. However, I haven't yet gone through and verified all functionality against Eclipse Juno so there may be more problems.
Here are a couple known defects that I wanted to fix but didn't want to delay 0.22.0 for:
- 'u' undo operation doesn't work in some files (#86)
- This is consistently a problem in certain XML files like Maven pom.xml files but is otherwise difficult to reproduce.
- If you run into this issue, Eclipse's normal Ctrl+Z undo will still function
- 'gt' has inconsistent behavior in Eclipse Juno
- I'm going to do my best to refactor this feature so it works in both Eclipse 3.x and 4.x but I'm not sure if that will be possible
- I don't want to break compatibility with the Ecipse 3.x series so quickly after 4.2 releasing
Aside from those issues, everything is looking good. See the previous news posts for all the features/fixes we've included since 0.20.0. I think it's a pretty impressive list given that 0.20.0 was released less than 2 months ago.
