/atom-vim-mode-plus

vim-mode improved

Primary LanguageCoffeeScriptMIT LicenseMIT

vim-mode-plus Build Status

vim-mode improved.

What's new in v0.58.0

  • In v0.58.0, introduce preset-occurrence and persistent-selection.
  • In v0.55.0, introduce occurrence-modifier

These features are very powerful, especially for the power user. Read the following documents to learn how to use them.

Important

  • vim-mode-plus is replacement for vim-mode, you must disable vim-mode first to use vim-mode-plus.
  • You don't need the following packages since they're built-in to vim-mode-plus:
  • Scope for CSS selector and keymap is different from vim-mode, not compatible.
  • Internal code base is very different. Thus, issues and PRs should be directly sent to vim-mode-plus. DON'T report vim-mode-plus's issues or PRs to the official vim-mode.

Thanks

My work is greatly owing to former achievements of the original vim-mode developers and many of its contributors.
As you can see in the commit history, this project was originally started by forking official vim-mode.
The great design to achieve Vim operation by composing operator with target (motion, text-object) on top of operationStack still lives in vim-mode-plus now.
I don't think I can find this idea by myself from nothing.
Sincerely, I feel I couldn't do anything without the original vim-mode.

Issue report

Whats this?

Fork of vim-mode. Started on 2015.8.1.

  • Many bug fixes.
  • Refactoring: Rewritten almost every line of code.
  • Highlight search
  • visual-blockwise built-in
  • Incremental search by incrementalSearch setting (disabled by default).
  • Cursor visible in all visual-mode (characterwise, blockwise, linewise).
  • Maintain the same cursor position after operations (e.g y, gU) by stayOnYank, stayOnOperate setting. (disabled by default)
  • Lots of new motions like move-up-to-edge, move-down-to-edge. (Mapped to [ and ], Aggressive decision.)
  • Surround built-in. Powerful AnyPair family (change-surround-any-pair operator, inner-any-pair text-object) to detect pair automatically.
  • Set cursor position to start of change on undo or redo by enabling setCursorToStartOfChangeOnUndoRedo (enabled by default. Atom's default is end of change).
  • Allow super granular keymap which is only effective when specific operation is pending like yank-pending, delete-pending. #215
  • And more...

FAQ

Search Q&A label on issues.

Why fork? why not directly contribute to official vim-mode?

  • Changes are too big.
  • I felt many features are too experimental to merge to the official vim-mode.

In visual-block mode, some motions make the editor slow, freeze.

Not freezing, it's just VERY slow.
You can workaround by disabling some keymap. See #214.

ex-mode?

Want to suppress autocomplete-plus's auto suggestion except insert-mode.

Set suppressActivationForEditorClasses autocomplete-plus's config to following value.

vim-mode-plus.normal-mode, vim-mode-plus.visual-mode, vim-mode-plus.operator-pending-mode, vim-mode-plus.insert-mode.replace

If you want to directly edit config.cson, here it is.

"autocomplete-plus":
  suppressActivationForEditorClasses: [
    "vim-mode-plus.normal-mode"
    "vim-mode-plus.visual-mode"
    "vim-mode-plus.operator-pending-mode"
    "vim-mode-plus.insert-mode.replace"
  ]

Wiki

Keymap

vim-mode-plus has many advanced, experimental features but most of them have no default keymap.
If you want to use the full power of vim-mode-plus, see and experiment with each keymap, command in following links.

Helper packages

Below is list of my packages which provide more vim-like experience.
Why I don't build in these features? Because it takes more time and some features are useful for non-vim user.

  • cursor-history provides c-i, c-o to go/back in the cursor position history.
  • open-this provides gf to open file under cursor.
  • clip-history Does not exist in pure Vim, provides clip-board history you can pop yanked text until you get result you want.
  • choose-pane Does not exist in pure Vim, provides keyboard navigation between panes/panels by choosing it by label.
  • paner provides ctrl-w H, J, K, L, x to move pane.

References

Vim official

Other

Commit emoji convention

  • 📝 Add comment or doc
  • 🎁 New feature.
  • 🐛 Bug fix
  • 💣 Breaking compatibility.
  • ✅ Write test.
  • 🔥 Remove something.
  • 🍺 I'm happy like reduced code complexity.