Frankly, I'm a bit embarrassed that I wrote code to serialize and save the registers every time one changes. This can actually have a noticeable effect on performance if any registers have even modestly large values.
It seems `globalState` doesn't work in `deactivate`, so we need to store the register data in a file.
Fixes#5707
VS Code is adding support for running extensions in a nodeless environment. This PR tries to refactor the code a bit to allow later on replacing node APIs (fs, child_process) with shims.
This PR should not change any functionality for running Vim in desktop.
Once we can run Vim in a web worker, we can also think about running Vim in its own worker, which at the end will help with the performance issue: https://github.com/microsoft/vscode/issues/65876
Visual selections as well as `desiredColumn` would get screwed up because our cursor syncing logic was sloppy.
Visual line mode still gets messed up by this (see #4889)
Fixes#4888
This is a step toward fixing our janky status bar logic. Basically, I want to make information about the current mode easily available from a VimState without needing the ModeHandler.
The Mode class has been destroyed, replaced by some functions that take a ModeName.
More refactoring could be done, I'm sure, but I think this is a BIG step in the right directions.
Read key remapping commands from $HOME/.vimrc, $HOME/_vimrc, or a
user-specified Vim configuration file. For each, build an IKeyRemapping
object and append it to the appropriate collection, _if_ doing so will
not override a remapping specified in the VS Code settings.
Partially addresses #463. This implementation borrows heavily from
Sheepolution/vimrc-to-json.
* Add `editVimrc` command
* Add .vimrc validator, correct usage of new config names
* Source .vimrc automatically after saving it
Fixes#3713 , hopefully.
This happened when you were editing a file in two splits at once. An edit in one split that affected the cursor position in the other split would trigger an extra `onDidChangeTextEditorSelection` event that we should be ignoring.
e.g. filter, includes, find, etc.
After doing this, there was only one usage left (for escaping regex), so I replaced the lodash dependency with one that only exposes that functionality.
* Assign activeTextEditor to local variable first.
because activeTexteditor may have changed after call async method.
fixes VSCodeVim#3865
* Get rid of workaround to wait goToDeclaration
related #3277
* Implement / (search) register
Fixes#3542
* Implement read-only registers
Fixes#3604
* Implement % (file name) register
Refs #3605
* Implement : (command) register
Fixes#3605
* Do not display _ (black hole) register in :reg output
Fixes#3606
* :reg can take multiple arguments
When it does, it lists only the registers given as an argument.
Fixes#3610
* Allow the : (command) register to be used as a macro to repeat the command
Fixes#1775