It's a good vi plugin, and you can't beat free. However, I have used both VsVim and ViEmu, and I get noticeably better performance from ViEmu. In VS 2013 on my machine, VsVim (184.108.40.206) lags and pauses enough that it's a constant distraction. ViEmu has had no such issues.
This is a very good extension. It is not only actively maintained, but new features are continually adding, bringing it ever closer to Vim's behavior. Jared Parsons is very active in responding to issues submitted on the Github page and he works to prioritize the features according to what the users are most needing. I wouldn't use Visual Studio without it if I could possibly help it. This makes my job better every day.
This extension is beyond words! Here is what I love:
1) it's mostly complete - there a few commands missing here and there but you will never find yourself cursing at VsVim.
2) it plays nice with other extensions - Jared actually seems to go out of his way to make sure VsVim doesn't break or isn't broken by other extensions. I use the Refactor from Developer Express - the two play beautifully together.
3) it can be turned off temporarily - this, strange as it may seem, is probably the most important feature there is. If something goes horribly wrong, being able to turn off VsVim for a few seconds saves the day.
4) Jared's support is second-to-none - I don't think the man sleeps or knows the meaning of the word. Look at the Q&A page - every question is answered, every bug logged, pretty much every feature suggestion accepted and due to be implemented.
5) it's free - it shouldn't be, not with the kind of effort it takes to make such a high quality, super advanced and uber useful extension, but it's free. I feel guilty using it without paying, but it's free and always will be.
Only thing I hate is the feeling of VS2012 when VsVim isn't installed!
Great extension bringing the power of Vim to Visual Studio. It's clearly not easy writing an extension like this and making it play nicely with all the other extensions on the market. However, VsVim achieves this and Jared is quick to respond and fix issues that do arise. I did actually buy ViEmu a long time ago, but have never looked back since finding VsVim. One day, I hope to actually find some time to contribute back.
Could you add an option or disable VSvim while in report designer from reporting services, also in design mode of webpages would be good sometimes to have ctrl-v because "p" does not work in there :)
keep up the great work, this extension rocks.
Hello thank you for the reply, it's included in the SQL data tools http://msdn.microsoft.com/en-us/data/tools.aspx
this is the type of project http://i.technet.microsoft.com/dynimg/IC574428.gif
anyway for now I just remap the orignal ctrl-v so I can paste stuff in designer mode of aspx design view, for the report editor I have to disable plugin due to key stroke strange behavior
it should be possible to make this work by mapping Tab to Down in insert mode (small bug that needs to be fixed though). But this would mean that every occurence of Tab would move the key down. Is that the feature you are looking for?
This sounds like it would move the cursor down when typing, sadly I use tab to indent into lines. Ahwell was a nice thought.
I do however have another question. I created a _vsvimrc file in my home directory to remap hjkl keys to jkl; using the nnoremap command for each key. Everything works nicely appart from now ; moves the cursor two character to the right instead of one. Is this a bug or can I specify how many characters are moved on the keypress?
Sorry for the long question
No problem on the long question. Can you post your _vsvimrc somewhere that I can take a look at it? Also do you have any other extensions installed? It's possible one of them is interferring here and causing the double behavior.
I have extensions for git, sql server and a comment spell checker but the problem still occurs with these disabled. Here is a dropbox link to the _vsvimrc file
Sorry for the delay, I just debugged into it today and figured out what is going wrong. The issue is that there is a single space after the 'l' character on the 'nnoremap ; l ' line. This means that when you hit ';' it runs the key sequence 'l<Space>' which causes the cursor to generally speaking go right twice.
This is strangely enough the behavior that gVim displays. It considers any trailing white space on the line to be part of the mapping
Here is an issue that has confused me for a long while now.
If you have text "ABCDE" then use the mouse in normal mode to highlight the letters, going backwards from E to A is inclusive - the highlight will select all the way up to and including letter A where the block cursor will be blinking.
If you do the same going forward from A to E, it only highlights to letter D, and the block cursor blinks over E which is not included in the highlight. To get E included you have to extend the highlight one character beyond such that the block cursor rests to the right of E when done.
Performing the highlight using the motion commands seems to work inclusively in all directions - the character beneath the block cursor is always included in the selection. Can this be behaviour be used when using the mouse too?
PS: I have virtualedit set to "onemore" in my _vsvimrc file - dunno if this makes a difference!
It looks like this is just a bug in the highlight code. I tried some samples in VsVim and gVim and it looks like I'm doing reverse selection incorrectly in some cases. I will look into getting this fixed
Is there any way for me to install a previous version of your wonderful plugin? This recent version freezes Visual Studio 2012 when I open a file (I have no other active plugins). Please help! I am addicted to VsVim and am suffering withdrawals.
I'm sorry you're having problems. Previous versions of VsVim are available here
Manually uninstall the current version, down load the previous version, double click on it and it will install.
If you have a few minutes though I'd really like to figure out what is going wrong here. Otherwise the bug will persist into future versions :(
The most likely cause is either a line in the _vimrc which is putting me into an infinite loop. Could you post your _vimrc somewhere that I could take a look at?
Hi Jared, happy new year in advance!
I am using VS2012 and VsVim 220.127.116.11 and was surprised to find that when the Quick Find window is active in the editor (do Ctrl+F and it pops-up on the top right), the normal mode commands are completely ignored (e.g. pressing 'gg' to jump to the beginning of the editor is ignored and the letters appear literally). When you press Esc to dismiss the Quick Find window, the normal mode commands work again.
Is this by design or is the Quick Find window somehow responsible?
Happy new year to u as well!
That behavior is by design. In general VsVim will defer to VS UI when it is being displayed (intellisense, quick find, smart tags, etc ...). Once it's dismissed VsVim will take over again
That makes sense, especially for intellisense and smart tag popups which are on the screen for few seconds.
There's often a strong urge to navigate using VsVim commands when Quick Find is active so if VsVim could defer only the keys that are required by the active popup (in the same way you can tell it to let VS handle some common shortcuts), that would be pretty neat.
Many thanks for your continued work on this awesome extension!
PS: does the 'ge' command work? In classic Vim, it jumps to the last letter of the previous word and I can't seem to make it work in VsVim :(
Unfortunately it's hard to tell what is or isn't accepted by the pop up. Every version of VS adds more short cuts and it would be a constant battle to keep up with them. Especially since some shortcuts actually change based on the current input language of VS. I worry it would be hard to do this without the implementation being flaky.
As for 'ge' this isn't implemented yet but I will look at getting that done. Should be fairly easy
I have often marvelled at how completely alien VS feels when you change the language (I code in VB2012) so I can see the nightmare of trying to track each shortcut. I am no expert on the internals of VS editor keyboard handling, but if it has something akin to the KeyEventArgs.Handled property, perhaps you could use that to detect cases when keystrokes such as 'gg' are not handled by the pop-up, then handle them with VsVim logic.
I look forward to the 'ge' command along with its sisters 'g;' and 'g,' which are used to jump around the change list (the g-semicolon one is handy for example when you paste something in normal mode then want to jump the cursor back to where the paste began so you can add a space to separate the pasted text from the text that precedes it).
Thanks as always!
Are you doing this in a C++ project? C++ implements Edit.GoToDefinition differently than other languages in that it requires an argument instead of just inferring it from the current caret position. It would be hard to make this work with a key mapping.
But VsVim already does this for you. If you go to the VsVim options page (Options button in the bottom right corner of the screen) you can just switch control of Ctrl-] to VsVim and it will automatically implement it as Edit.GoToDefinition
VS2013, latest VsVim.
I have an extension that does stuff when a file is saved. When I use File->Save, it works as expected. When I use :w, the extension is not called.
That is somewhat surprising... Is that a problem with VsVim's :w, or do I need to map :w to something? (And how would I do that...?)
Saving a file in Visual Studio is unfortunately a complex process. The high level process used via File -> Save is insufficient for VsVim because it doesn't respect the semantics that vim provides. In particular there are some cases around forced writes that can't be emulated with that API. Instead I call into somewhat lower level APIs to do the actual saving. These are 100% supported APIs in Visual Studio though. It's possible that other extension simply isn't listening to the correct hooks. Can you tell me what extension this is?
I took a look and it does appear that the PowerCommands tool is listening to the wrong event here. I'm going to try and followup with the owner of this tool and see if I can get them to hook the command an the proper level.
Win7 x64 Pro
VS2013 Premium, latest VsVim
If I have web.config and packages.config open in separate tabs, web.config is current:
- :q closes web.config, packages.config is current
- :q closes packages.config, web.config is open and current ?!
- :q now does nothing.