- Breaking: Rename confusing
ScrollXXX
(It easily be confused with scroll motions(ctrl-f
etc..)ScrollDown
(ctrl-e
) toMiniScrollDown
ScrollUp
(ctrl-y
) toMiniScrollUp
- New: Smooth scroll option plus more for
MiniScroll
(ctrl-y
,ctrl-e
)smoothScrollOnMiniScroll
: defaultfalse
smoothScrollOnMiniScrollDuration
: default200
defaultScrollRowsOnMiniScroll
: default1
- New: Smooth scroll option for
redraw-cursor-line
commands.redraw-cursor-line
isz
begging command likez t
,z u
,z z
,z b
etc..- Default disabled, I need this when I do demo. With smooth scroll on
z u
, less chance to leave behind audiences. smoothScrollOnRedrawCursorLine
: defaultfalse
smoothScrollOnRedrawCursorLineDuration
: default300
- New, Experimental: New scroll motion to scroll 1/4.
ScrollQuarterScreenDown
: keymapg ctrl-d
ScrollQuarterScreenUp
: keymapg ctrl-u
- Smooth scroll options are NOT explicitly provided, it use
ScrollHalf
's config.
- Internal: Rename non-straightforward naming
- From
SelectInVisualMode
toVisualModeSelect
- From
isAsTargetExceptSelectInVisualMode
toisTargetOfNormalOperator
- From
- Diff: here
- Fix: Remove spec for now removed feature.
- Diff: here
- Fix:
transform-string-by-select-list
throw exception when executed invisual-mode
.- Regression by operator execution model redesign from v1.13.0.
- Internal:
- Improve how
transform-string-by-external-command
is executed. - Remove
OperationAbortedError
which is vmp specific error used toabort()
operation, but now no longer used.
- Improve how
- New, Experimental:
JoinTarget
operator(wanted to name justJoin
but it's already taken byJ
)
- Diff: here
- Improve: Better multi cursors support for
toggle-persist-selection
. - Improve: Refold temporarily opened fold by
/
and?
when confirmed #931 - New:
z X
family to redraw cursor line atupper-middle
. #932- Keymap and Command
z u
:redraw-cursor-line-at-upper-middle
z space
:redraw-cursor-line-at-upper-middle-and-move-to-first-character-of-line
- Conflict:
z u
with pureVim'sspellfile
related command. But OK, vmp have no plan for this feat. - Here is summary table of keymap and where to draw
| where | no move | move to 1st char | |--------------|---------|------------------| | top | z t | z enter | | upper-middle | z u | z space | | middle | z z | z . | | bottom | z b | z - |
- Keymap and Command
- Breaking: rename confusing
ScrollCursorToTop
commands. #932z enter
:ScrollCursorToTop
toRedrawCursorLineAtTopAndMoveToFirstCharacterOfLine
z t
:ScrollCursorToTopLeave
toRedrawCursorLineAtTop
z .
:ScrollCursorToMiddle
toRedrawCursorLineAtMiddleAndMoveToFirstCharacterOfLine
z z
:ScrollCursorToMiddleLeave
toRedrawCursorLineAtMiddle
z -
:ScrollCursorToBottom
toRedrawCursorLineAtBottomAndMoveToFirstCharacterOfLine
z b
:ScrollCursorToBottomLeave
toRedrawCursorLineAtBottom
- Internal: Remove
Operator.prototype.requireTarget
, now all operator have target.- Use
target = "Empty"
for oldrequireTarget = false
equivalent.
- Use
- Internal: Remove casual use of
isComplete
and renamed toisReady
as prep for upcoming refactoring. #933- Now
isReady
(wasisComplete
) is used only inoperationStack
. - For input taking
MiscCommand
family command such asmark
,insert-register
now executed in async. - All operators which take extra input now executed in async(no longer user
requireInput
mechanism). - At this point,
requireInput
is used only by Motion, which I cannot make it simply transform to useasync
execution. - Since motion is used as Operator's target and Operator has not yet support target executed in async scenario.
- Now
- Diff: here
- Improve:
duplicate-with-comment-out-original
flashes correct range(only changed range).
- Diff: here
- New: Operator
duplicate-with-comment-out-original
(idea by @nwaywood) #929- Duplicate targeted lines(always works as
linewise
) and comment out original target(selected) text. - No keymap by default. But available from
select-list
(ctrl-s
for macOS user). - This is maybe useful when you change code with keeping original code as reference.
- e.g. If I keymap
g shift-cmd-D
tovim-mode-plus:duplicate-with-comment-out-original
. g shift-cmd-D p
: Duplicate paragraph with original paragraph commentout.g shift-cmd-D z
: Duplicate fold with original fold commentout.g shift-cmd-D f
: Duplicate function with original function commentout.
- e.g. If I keymap
- Duplicate targeted lines(always works as
- Improve: Remove operator's
supportEarlySelect
flag used bysurround
andreplace
operator #926- This option's purpose is to select target immediately after target provided and before reading user's input.
- Now achieve same UX with more simpler way.
- Old: Select target before
execute()
and skipselectTarget
by checking if it's already selected. - New: Just execute and
await
user's input(simple and no complex skipselectTarget
scenario).
- Old: Select target before
- As result of this re-design,
surround
andreplace
operator now executed inasync
.- This should be no diff from UX perspective. Just diff in internal execution model(require spec code change).
- Improve: Respect occurrence wise when updating register
- When
c o p
update register's content register's type- Old: Save with register's type
linewise
, immediate paste(cmd-v
) ininsert-mode
surprise user.- Since replaced text by
c
wascharacterwise
, but pasted text add extra newline(\n
).
- Since replaced text by
- New: Save with register's type
characterwise
, and immediate paste(cmd-v
) ininsert-mode
works as expected.
- Old: Save with register's type
- When
- Improve: Spec helper
- New:
ensureWait
is likeensure
, but it wait till finish operation for asyncexecution
- Breaking: Remove
ensureByDispatch
since it's non essential, just wrapper. I want manage minimum set ofensure
family. - Breaking: Disallow
keystroke
helper(after confirmed that it's not used by vmp and vmp-plugins). - Improve:
ensure
now recognize 1st arg as keystroke(not like keystroke or ensureOption as oldensure
).- This is more clearer and explicit, and allow 2nd ensureOption empty to just dispatch keystroke(as replacement of old
keystroke
helper).
- This is more clearer and explicit, and allow 2nd ensureOption empty to just dispatch keystroke(as replacement of old
- New:
- Diff: here
- Fix:
move-up-to-edge
,move-down-to-edge
motion did not work correctly in soft-wrapped editor.- Regression from v1.11.0.
- Diff: here
- Fix: No
r
with'
or"
input properly work on some international keyboard which require TWO keystroke to input these quotes.- Fix provided 1.11.4 was just fix issue partially, not perfect.
- Diff: here
- Fix: No
r
with'
or"
input properly work on some international keyboard which require TWO keystroke to input these quotes.
- Diff: here
- Fix: No longer throw exception when
change-surround-any-pair
cannot find surround pair.
- Diff: here
- Fix: No longer throw exception when
demo-mode
pkg was activated, regression from v1.11.0. - Fix
remove-leading-white-spaces
operator work properly again regression from v1.11.0. - Improve: #701, When
wrapLeftRightMotion
is enabled andl
invC
now can select new-line(can stop at column 0 of next-line). - Internal: No longer expect
Operator.protoype.setTarget
return instance.- This eliminate unessential contract between caller/callee.
- Diff: here
- Fix:
z c
no longer throw exception, this is regression from v1.11.0. - Fix:
highlightSearch
, fix minor not-highlighted issue where it should be.- Fix: Highlight newly opened editor is not highlighted when
mainMoudle.globalState
was not populated.- E.g.
pane:split-right
,pane:split-down
on fuzzy-finder'sselect-list
- E.g.
- Fix: Now highlight newly opened editor even when it's not initially activated.(e.g. open on next pane without activating it).
- Fix: Highlight newly opened editor is not highlighted when
- Diff: here
- Fix:
toggle-highlight-search
command now correctly clear/re-highlight when value changed #918- This is regression introduced in v1.10.0 sorry!
- Improve:
toggle-fold
now work with multiple cursors. - Improve, Breaking: How text-object function detect function scopes
- Improve: function scope detection for
type-script
. - Improve, Breaking:
source.js
andsource.jsx
.- Ignore arrow function. Use
a-fold
(e.g.y z
) for arrow-function. - Now no longer detect instantiation (
new Class
) call as function text-object.
- Ignore arrow function. Use
- Improve: function scope detection for
- Breaking: Rename following align operator since it was confusing.
- Old:
align-start-of-occurrence
, New:align-occurrence-by-pad-start
- Old:
align-end-of-occurrence
, New:align-occurrence-by-pad-end
- Old:
- Internal: Convention change, return value of
Base.prototype.initialize()
is not used, so no need to returnthis
.
- Diff: here
- New:
numbering-lines
operator, which adds line number to each line.- No default keymap, accessible via
transform-string-by-select-list
(ctrl-s
for macOS user) command.
- No default keymap, accessible via
- Improve:
z t
,z enter
works properly when last screen row was visible. @dcalhoun #915.editor.scrollPastEnd
need to betrue
to work these command properly, so show notification if not enabled.
- Fix:
z e
did not scroll until next cursor move is happens, but now scroll immediately. - Improve, Performance: Lazy load further
- Improve: Improve integration with demo-mode package by making hover and flash highlight fadeout more in-sync.
- Internal: Remove intermediate class
ScrollWithoutChangingCursorPosition
used for misc-scroll commands.
- Diff: here
- Fix: [CRITICAL] No longer throw exception by lack of
semver
dependency. Sorry!
- Diff: here
- Maintenance: Convert from CoffeeScript to JavaScript for operator, motion, text-object codes.
- Now all running code is written in JavaScript.
- Still test-spec is written in CoffeScript.
- Through rewriting to JS, introduced lots of refactoring(architectural simplification, minor bug fixes).
- Breaking: CoffeeScript based custom-vmp-operation is no longer supported.
- Fix: Broken features broken from Atom-v1.22.0-beta0 now work again.
- Fold related commands:
a-fold
,inner-fold
,move-to-next-fold-start
etc.. - Comment text-object.
- Fold related commands:
- New: Operator
AlignOccurrence
,AlignStartOfOccurrence
,AlignEndOfOccurrence
. #904 #906- No default keymap(set it by yourself if necessary).
- Available from
transform-string-by-select-list
(ctrl-s
for macOS user) commands. - How align operator works.
- I introduce this operator with great simplicity by intention.
- It's always add space to start or end of occurrence to align occurrence.
- Add only, not trim existing spaces, if you want to remove consecutive spaces, use
compact-spaces
operator(g space
for macOS).
- For general purpose aligning(such as align lines by
=
assignment), use pkg like aligner. - This operator's goodness is explicitness and manual control for pattern to use for align, which make it possible general purpose aligner tools is not good at.
- New:
blackholeRegisteredOperators
to disable register update for selected operator commands. #901, #902- Old
dontUpdateRegisterOnChangeOrSubstitute
are deprecated. it's setting is auto-migrated on first startup. - Set list of operator commands to
blackholeRegisteredOperators
.- E.g.
change, change-to-last-character-of-line, delete-right, delete-left
.
- E.g.
change*
,substitute*
,delete*
is special value available to specify ALL same family operators.
- Old
- Diff: here
- Fix:
TransformStringByExternalCommand
operator now correctly shift tonormal-mode
after operation finished.- This operator is specifically used by
vim-mode-plus-replace-with-execution
pkg(was broken, but recover now).
- This operator is specifically used by
- Diff: here
- Maintenance: Add
Base.initClass
as alias ofBase.extend
for upcoming vmp changes.
- Diff: here
- New:
select
operator just forselect
target.select
is super essential operator which have been used in every motion invisual-mode
.- But this
select
operator was not available as command. - Now vmp expose this as
select
operator with slight modification.- Original
Select
operator used invisual-mode
was renamed toSelectInVisualMode
. - The diff between
Select
andSelectInVisualMode
isSelect
acceptpreset-occurrence
andpersistent-selection
butSelectInVisualMode
is not so that user can modify selection without being interfered by existingpreset-occurrence
andpersistent-selection
.
- Original
- New Config:
keymapSToSelect
conditional keymap. When enabled,s
behaves asselect
operator.s p
: select paragraph. Equivalent tov i p
.s i i
: selectinner-indentation
Equivalent tov i i
.s o p
: selectoccurrence
in paragraph.g o s p
: selectoccurrence
in paragraph(usepreset-occurrence
byg o
).s o p o escape
: Place cursors to each start position ofoccurrence
in paragraph.s o p I
: insert at start position ofoccurrence
in paragraph.s o p A
: insert at end position ofoccurrence
in paragraph.
- Improve:
[
(move-up-to-edge
) and]
(move-down-to-edge
) now motion stops at first and last row again.- Now stoppable as long as target column is exist at first row or last row.
- This behavior is added at #314(v0.49.0) but removed at #481(v0.66.0).
- Now re-introduced this feature with avoiding edge case reported in #481.
- Improve: Confirm on occurrence operation #888, #894
- Now ask confirmation before starting to create
occurrence-markers
ing o
(preset-occurrence
), orc o
(usingo
modifier) operation. - Allows cancellation to avoid editor become unresponsive while creating tons of markers.
- e.g. If you
g o
accidentally for single-space and editor have huge matches, no longer freeze editor if you cancel confirmation.
- e.g. If you
- New: config
confirmThresholdOnOccurrenceOperation
(default2000
) control confirmation threshold.
- Now ask confirmation before starting to create
- Keymap: Shorthand keymap for
inner-entire
inoperator-pending-mode
for Linux and Windows.- Windows and Linux user can
ctrl-a
as shorthand ofi e
(inner-entire
).- Usage example:
y ctrl-a
to yank all text in buffer.
- Usage example:
- For macOS user
cmd-a
is provided as shorthand ofi e
in older version(v0.88.0).
- Windows and Linux user can
- New: Operator command
insert-at-head-of-occurrence
,insert-at-head-of-subword-occurrence
.- Previously only
start
andend
version of this commands are provided.
- Previously only
- Diff: here
- Fix:
f escape f
no longer throw exception whenreuseFindForRepeatFind
was enabled #883 - New:
insert-at-head-of-target
operator, in the past I removed this operator, but I need this now #881. - Improve: Cancelling in the middle of operation no longer clear reset multiple-cursors #882, #885
- Motion: Find family
f
,F
,t
,T
- Operator: Replace
r
surround
family,split-string
family,join-by-input
family
- Motion: Find family
- Improve: No longer hide cursor when focus is at mini-editor.
/
,?
: was hidden in all mode in older version.f
,t
: was hidden inoperator-pending-mode
in older version.
- Improve: cleanup CSS in
vim-mode-plus.less
. - Improve: Respect original selection's reversed state on occurrence-operation operation.
- Doc: Wrote wiki and update README to for
cursor-line
modifying syntax-theme issue #887.- See FAQ section of README: "Flash effect not appear on cursor-line..."
- Internal: Add debug code to investigate known issue #875(for cursor jumped unexpectedly).
- Diff: here
- Improve:
occurrence-operation
now aware ofoperator-bound-wise
.- Behavior diff: Diff appears in
occurrence-operation
.- Old: Always worked as
characterwise
. - New: Works as
linewise
whenV
operator-modifier is used.linewise-bound-operator
(e.g.g /
,>
innormal-mode
,D
,Y
invisual-mode
etc) is used.
- Old: Always worked as
- What is
occurrence-operation
andoperator-bound-wise
?occurrence-operation
: Operation witho
modifier(e.g.c o f
) or operation with preset-occurrence(e.g.g o c f
).operator-bound-wise
:D
,C
,Y
invisual-mode
andV
forced operation liked V p
.
- Example(See also animation GIF in PR #879)
- Assume non consecutive
console.log
lines scattered in function and you want to bulk appply operation linewise-ly. - First place cursor at
console
ofconsole.log
. Then you can do variety of operation linewise-ly. g o v i p D
: Mark occurrence(g o
), select-paragraph(v i p
), thendelete-line
(D
).g / o p
:toggle-line-comments
(g /
) foroccurrence
(o
) in paragraph(p
).g U o V p
org U V o p
:upper-case
(g U
) foroccurrence
(o
) with force linewise(V
) in paragraph(p
).
- Assume non consecutive
- How this works?
- Most operator doesn't have wise in operator-level, in this case operation's wise is determined by target(motion or text-object).
- When
V
operator-modifier orwise-bound-operator
is used, operation's wise is forced to this bound wise. - When
occurrence-operation
is forcedlinewise
, it total steps is here.- Select target(1)
- select occurrences contains in (1)
- range > select linwisely and merge selections with immediately adjacent row.
- Takeout
- Some operators(e.g.
C
,Y
,D
,g /
,>
,<
etc) have pre-bound tolinewise
.- When you use these operation with
o
org o
, it works aslinewise
.
- When you use these operation with
- You can force wise to
linewise
byV
operator-modifier, in this case occurrence-operation also workslinewise
. - Also remember you can distinguish [
c
andC
], [y
andY
], [d
andD
] invisual-linewise
mode.- Use lower letter(
c
,y
,d
) if you wantcharacterwise
behavior. - Use capital letter(
c
,y
,d
) if you wantlinewise
behavior.
- Use lower letter(
- Some operators(e.g.
- Behavior diff: Diff appears in
- Diff: here
- Summary: This is ambitious and dangerous change.
- If success, lots of potential issue would be fixed.
- But dangerous since it use more frequently fired hook(
editor.onDidChangeSelectionRange
).- I'm not 100% sure if this change works properly for all other commands provided by atom-core and packages.
- Fix: #874
cmd-d
(find-and-replace:select-next
) innormal-mode
respectSelectNext#wordSelected
state forfind-and-replace
.- Original
cmd-d
select word only(exclude partial matches) if original selection is also created viacmd-d
. - But this useful feature did not work in vmp's
normal-mode
. - Because when
cmd-d
is executed innormal-mode
, vmp modify selection internally, which breaks statefind-and-replace
keep internally. - Behavior diff with text
atom atomic atom
.- Old:
cmd-d
twice select 1st and 2ndatom
. Here,atom
ofatomic
is selected, bad!. - New:
cmd-d
twice select 1st and 3rdatom
.
- Old:
- Original
- Fix: #872
cmd-f
(find-and-replace:show
), search word, confirm thenescape
to clear selection no longer reset cursor position to wherecmd-f
was started.- This happens when
cmd-f
started with non-empty selection.
- This happens when
- Fix: #873 Now whenever outer-vmp command modify selection, vmp starts
visual-mode
accordingly.- How vmp handle temporal selection modification done in single-command?
- When outer-vmp command select some range(1) and clear(2) in single-command.
- Vmp start
visual-mode
at (1), then reset tonormal-mode
at (2). - This is NOT elegant solution, but there is no other better way.
- We cannot determine selection is eventually cleared or not within
editor.onDidChangeSelectionRange
event. - Delaying, debouncing to minimize useless mode-shift is bad for UX, user see slight delay for cursor updated.
- Diff: here
- New: Numbered register(
0-9
) and small delete register(-
). #871- When are they updated?
0
is for yank,1-9
is forchange
anddelete
.-
is for smallchange
anddelete
, whatsmall
means is "content is less-than-one-line".
- Currently no command to display register's content
- Package author can access register by
vimState.register.get(REGISTER_NAME)
.
- Package author can access register by
- When are they updated?
- Fix:
f
,r
did not work correctly when user modified.plain.text
grammar. #869- This issue only happens when user set
.plain.text
grammar to havesoftWrap
totrue
andsoftWrapHangingIndent
to non-zero value.
- This issue only happens when user set
- New, Experimental: SequentialPaste for
p
,P
andreplace-with-register
.- Unnamed register(
"
) maintain history at maximumsequentialPasteMaxHistory
. - When user execute
p
sequentially, it pop content from older history. - Intended to be used as lazy quick escape hatch from very recent unwanted register mutation.
- New configuration to control this new feature.
- Config:
sequentialPaste
(defaultfalse
) when enabled, pop history on sequential paste byp
,P
, andreplace-with-register
. - Config:
sequentialPasteMaxHistory
(default3
). maintain history specified this value.
- Config:
- Unnamed register(
- Improve:
f
family related- Improve: Restore original scrollTop when
findAcrossLines
enabled and cancelled after scroll. - Rename config:
keymapSemicolonToConfirmFind
tokeymapSemicolonToConfirmOnFindInput
(auto-migrate) - Improve: Empty confirm no longer move cursor when
findCharsMax
> 1. - New: Commands
find-next-pre-confirmed
andfind-previous-pre-confirmed
.- Scope: Available when
f
family waiting for input(atom-text-editor.vim-mode-plus-input.find
). - Keymap:
tab
, andshift-tab
is mapped by default. - Why?
- Allow you to adjust landing target BEFORE confirm to skip un-aimed stop interactively.
- In most case, using
;
or,
afterf
finished is OK. - But when
f
is used with operator, such asc t f "
and"
matched earlier spot than you aimed. - This situation is not recoverable/retry-able by
.
repeat, but manually avoid-able by new commands.
- Scope: Available when
- New, Experimental: Conditional keymap
keymapSemicolonAndCommaToFindPreConfirmedOnFindInput
(defaultfalse
).- When enabled,
;
and,
is mapped to newfind-next-pre-confirmed
andfind-previous-pre-confirmed
.
- When enabled,
- Maintenance: Remove
[EXPERIMENTAL]
tag from description offindAcrossLines
settings, since we found it useful. - Improve: Fix several highlight inconsistencies.
- Improve: Restore original scrollTop when
- Fix: Incorrect cursor rendering when
automaticallyEscapeInsertModeOnActivePaneItemChange
is enabled. #855- When
automaticallyEscapeInsertModeOnActivePaneItemChange
is set and active-tab change and back. - Cursor rendered odd way.
- This is started from Atom v1.19.0 with new editor-rendering change.
- To workaround issue, now use more appropriate
onDidStopChangingActivePaneItem
hook.
- When
- New, Experimental: Conditional keymap
keymapIAndAToInsertAtTargetWhenHasOccurrence
(defaultfalse
). #862- This is revival of old default keymap which is removed because it was too aggressive, confusing as default-keymap.
- When enabled and edigtor has
preset-occurrence
marker,I
andA
behave as operator which taketarget
. - e.g.
I p
,A p
to insert at start or end ofpreset-occurrence
in paragraph(p
).
- Improve: Now
maximize-pane
no longer automaticallyde-maximized
on active pane item change(tab-change). #866- So user can switch active tab with keep maximized.
- This was original behavioral design I intended. Noticed it's broken(not sure when, or initially broken), so fixed.
- Improve:
move-to-next-occurrence
,move-to-previous-occurrence
now visit in ordered by buffer position. #864- Following behavioral change is noticeable only when user create multiple
preset-occurrence
for different word.- old:
tab
,shift-tab
visitpreset-occurrence
in created order. - new:
tab
,shift-tab
visitpreset-occurrence
in ordered by buffer position.
- old:
- Following behavioral change is noticeable only when user create multiple
- Internal: Cleanup RegisterManager code to reduce my confusion.
- Diff: here
- Improve: highlight-find-char now highlight unconfirmed-current-match differently( with thicker border ).
- You now visually notified "no extra keytype is required to land this position" while typing.
- Diff: here
- Improve: highlight-find-char now highlight all chars in next lines when
findAcrossLines
was set.- This gives important feedback for your keystroke when your eye is needling destination keyword while typing.
- Diff: here
- Fix: Fix confusing description in setting, no behavioral diff.
- Diff: here
- Breaking, New:
findCharsMax
options to find arbitrary length of chars byf
.- Involves renaming, auto-value-conversion of existing configuration introduced in v1.1.0( yesterday ).
- New, Rename:
findCharsMax
: default1
.- If
find
's input reaches this length, confirm without waiting explicitenter
. - So default
f a
(move toa
char) is behavior whenfindCharsMax
is1
. - By setting bigger number(such as
100
) with also enablingfindConfirmByTimeout
, you can expect FIXED timing of confirmation against your input.- FIXED-timing-gap for "f > chars-input > wait > land(always by timeout)" flow.
- Old
findByTwoChars = true
is equals tofindCharsMax = 2
, and migrated on first time activation.
- If
- Rename:
findByTwoCharsAutoConfirmTimeout
tofindConfirmByTimeout
( generalize naming )
- Diff: here
- New, Experimental:
findAcrossLines
: defaultfalse
- When
true
,f
searches over next lines. Affectsf
,F
,t
,T
. - [Collecting feedback] twitter: @t9md or t9md#851
- Not sure if this is really necessary feature since
/
and?
is available for multi-line search.
- Not sure if this is really necessary feature since
- When
- Breaking: New default:
flashOnMoveToOccurrence
=true
- When preset-occurrence(
g o
) is exist on editor, you can move between occurrences bytab
andshift-tab
- When set to
true
, flash occurrence under cursor after move - This feature is NOT new, Just "flashing by default" is new change in this release.
- When preset-occurrence(
- Diff: here
- Fix: Fix confusing description in setting, no behavioral diff.
- Diff: here
- [CAUTION: added at release of v1.3.0]: Config option name changed.
- I basically don't want update old CHANGELOG, but this is for reducing confusion.
- Because of short release timing gap with braking config params change.
- v1.1.0: 2017.9.1
- v1.3.0: 2017.9.2
- When you read this below, keep in mind, change in available config params.
- Parameterized:
findByTwoChars = true
tofindCharsMax = 2
- Renamed:
findByTwoCharsAutoConfirmTimeout
tofindConfirmByTimeout
- Parameterized:
- New: [Summary] Now
f
is tunable. #852.- Inspired pure-vim's plugins:
clever-f
,vim-seek
,vim-sneak
. - Highlighting find-char. It help you to pre-determine consequence of repeat by
;
,,
and.
. - Aiming to get both benefit of two-char-find(
vim-seek
,vim-sneak
) and one-char-find( vim's default ).- Even after two-char-find was enabled, you can auto-confirm one-char input by specified timeout.
- Can reuse
f
,F
,t
,T
asrepeat-find
likeclever-f
. - Maybe reading test-spec for these feature is clearer than reading following explanation.
- Inspired pure-vim's plugins:
- Config: [Detail] Following configuration option is available to tune
f
.keymapSemicolonToConfirmFind
: defaultfalse
.- See explanation for
findByTwoChars
.
- See explanation for
ignoreCaseForFind
: defaultfalse
useSmartcaseForFind
: defaultfalse
highlightFindChar
: defaulttrue
- Highlight find char, fadeout automatically( this auto-disappearing behavior/duration is not configurable ).
- Fadeout in 2 second when used as motion.
- Fadeout in 4 second when used as operator-target.
- Highlight find char, fadeout automatically( this auto-disappearing behavior/duration is not configurable ).
findByTwoChars
: defaultfalse
- When enabled,
f
accept TWO chars.- Pros. Greatly reduces possible matches, avoid being stopped at earlier spot than where you aimed.
- Cons. Require explicit confirmation by
enter
for single char-input. You might mitigate frustration by.- Confirm by
;
, easier to type and well blend to forwardingrepeat-find
(;
).- Enable "keymap
;
to confirmfind
motion"(keymapSemicolonToConfirmFind
) configuration. - e.g.
f a ;
to move toa
( better thanf a enter
?).f a ; ;
to move to 2nda
(well blended to default repeat-find(;
)).
- Enable "keymap
- Enable auto confirm by timeout( See.
findByTwoCharsAutoConfirmTimeout
)
- Confirm by
- When enabled,
findByTwoCharsAutoConfirmTimeout
: default0
.- "When
findByTwoChars
was enabled, automatically confirm single-char input on timeout( msec ). 0
means no timeout.
- "When
reuseFindForRepeatFind
: defaultfalse
- When
true
you can repeat last-find byf
andF
(alsot
andT
). - You still can use
,
and;
. - e.g.
f a f
move cursor to 2nda
.
- When
- My configuration( I'm still in-eval phase, don't take this as recommendation ).
keymapSemicolonToConfirmFind: true findByTwoChars: true # [converted] to `findCharsMax = 2` findByTwoCharsAutoConfirmTimeout: 500 # [converted] to `findConfirmByTimeout = 500` reuseFindForRepeatFind: true useSmartcaseForFind: true
- Diff: here
- Version: Decided to bump major version.
- Breaking: Default config change/Renamed config name.
- Summary:
- Now all
stayOn
prefixed configuration have new defaultfalse
. - New default behavior is NOT compatible with pure-Vim.
- Set all
stayOn
prefixed configuration tofalse
to revert to previous behavior.
- Set all
- Some configuration parameter name is renamed to have
stayOn
prefix.- Automatically migrate existing config on activation of vmp.
- What is
stayOnXXX
configuration?- Respect original cursor position as much as possible after operation( select, move, operate ).
- It keep both cursor's row and column or column only( if vertical move was necessary ).
- Now all
- Config params renamed and changed default value
- New default:
incrementalSearch
=true
- New default:
stayOnTransformString
=true
- New default:
stayOnYank
=true
- New default:
stayOnDelete
=true
- Renamed/New default:
keepColumnOnSelectTextObject
>stayOnSelectTextObject
=true
- Renamed/New default:
moveToFirstCharacterOnVerticalMotion
!>stayOnVerticalMotion
=true
- Renamed with meaning inverted:
!moveToFirstCharacterOnVerticalMotion === stayOnVerticalMotion
- Renamed with meaning inverted:
- New default:
- Summary:
- Fix: Attempt to user non-yet-supported register( such as
" 0 y
) no longer throw exception.- This is regression introduced in v0.98.0. #844.
- Fix: Quickly switching active tab and back no longer re-start remaining flash animation #846.
- In previous version of vmp, You can see remaining flash re-triggered by(just an example)
y i p
see yanked paragraph is flashed.cmd-shfit-]
(pane:show-next-item
),cmd-shfit-]
(pane:show-previous-item
) quickly.- When you come back to original editor, once fadeout-ed flash is re-started. But no longer from this version.
- In previous version of vmp, You can see remaining flash re-triggered by(just an example)
- Fix: Incorrect mouse selection when editor was soft-wrapped.
- Improve: Make conditional keymaps config's title and description more user friendly.
- New: Conditional keymap config
keymapYToYankToLastCharacterOfLine
(defaultfalse
).- By default
Y
behaves asy y
. - This is not consistent with
C
andD
which behavesc $
andd $
. - By enabling this
Y
behaves asy $
.
- By default
- New: Screen line based column motion commands
g 0
,g ^
andg $
. Commands:move-to-beginning-of-screen-line
( keymapg 0
)move-to-first-character-of-screen-line
( keymapg ^
)move-to-last-character-of-screen-line
( keymapg $
) Config:allowMoveToOffScreenColumnOnScreenLineMotion
( vim-mode-plus original, intentionally differentiate default behavior from pure-Vim ).- Affects how
g 0
,g ^
andg $
find destination position. - When a line is wider than the screen width(no-wrapped line a)
true
(default): move to off-screen column.false
: move to on-screen(visible) column( = Vim default ).
- Behavioral difference appears only when
- Line is not wrapped.
- Destination column is off-screen(invisible because of the line is wider than screen width).
- for
g 0
: column-0 is off-screentrue
: move to column-0.false
: move to first-visible-column.
- for
g ^
: first-char-column is off-screentrue
: move to first-char-column.false
: move to first-visible-char-column.
- for
g $
: last-char-column is off-screentrue
: move to last-char-column.false
: move to last-visible-char-column.
- for
- Improve: Now
r
,f
,F
,t
,T
andsurround
use mini-editor to read user-input. #838- Benefit?
- Old: User cannot input non ascii char. It used keybinding to read user-input.
- New: User can input non ascii char and also can paste from clipboard(
cmd-v
).
- Limitation
- When user set keymap like
f a
, originalf
command no longer work properly( You cannot usef b
,f c
, etc... ). - This is Atom's keymap system's limitation which cannot follow activeElement change when replaying keystroke on partial-match.
- When user set keymap like
- Still
m
,`
,'
read char through keybinding intentionally. - These command use ascii char only.
- To allow user to set
m
prefix keymap likem X
without breaking wholem
feature.
- Benefit?
- Fix: Clicking find-and-replace's project-find result view throw exception when
projectSearchResultsPaneSplitDirection
set tonone
(default). #830.- Because, it opens matched entry on same pane and fire
mouseup
only(without preceedingmousedown
event) on newly opened editor. - Now vmp guard wired mouse-event by explicitly manage next expecting mouse-event.
- Because, it opens matched entry on same pane and fire
- Fix: When
startInInsertMode
wastrue
clicking editor ininsert-mode
throw exception but no longer. #830.
- Maintenance: Rewrite big amount of part from CoffeScript to JavaScript.
- Spec files are not re-written yet(and no plan at this point).
- Now files under lib/ directory are 29(JavaScript) vs 9(CoffeScript).
- Rewritten is done in following processare
-
- Translate by decaffeinate command provided by decaffeinate project(thanks!).
-
- Manual cleanup.
-
- Sorry If I create some regression.
- Improve: Hide mode-string in status-bar while non-editor-item become active item(e.g. settings-view).
- Breaking: Rename and change behavior of
vim-mode-plus:clear-persistent-selection
tovim-mode-plus:clear-persistent-selections
.- How?
- Old: clear persistent selections for all editors in workspace.
- New: clear persistent selections for current active editor.
- Why I changed
- Old behavior is inconsistent with other similar command.
- I couldn't imagine practical scenario where old behavior shines.
- How?
- Improve:
maximize-pane
#828, #829- New: Config option
centerPaneOnMaximizePane
( defaulttrue
). by @dcalhoun- Old behavior: Text in editor is always centered.
- New behavior: Text in editor is centered if
centerPaneOnMaximizePane
istrue
.
- New: Command
vim-mode-plus:maximize-pane-without-center
(default keymap:ctrl-w Z
). - Confusing?
- If you never need centering effect, set
centerPaneOnMaximizePane
tofalse
and usevim-mode-plus:maximize-pane
command. - If you sometime want to centering, but sometime don't want centering
- Leave
centerPaneOnMaximizePane
totrue
( default ) - Use
maximize-pane
(cmd-enter
orctrl-w z
) andmaximize-pane-without-center
(ctrl-w Z
) command respectively."
- Leave
- If you never need centering effect, set
- New: Config option
- Internal, Dev, Breaking: Remove introspection report generating command, which was important in early phase of vmp, but no longer.
- Dev:
write-command-table
no longer throw exception on first use after restart. - Tweak: Change normal operator flash duration from 0.3s to 0.5s.
- Improve: Mouse #826
- Fix: click in
visual.blockwise
mode no longer move cursor to first line of editor. - Now mouse action appropriately modify selection and enter
visual-mode
if necessary.shift-click
click
(mousedown -> mouseup)drag
(mousedown -> mousemove -> mouseup).- double click: Atom select clicked word, vmp update visual-mode.
- triple click: Atom select clicked row, vmp update visual-mode.
- Fix: click in
-
Improve: #819 TextObject function for
language-rust
now also works on Windows platform. -
Fix:
g q q
now work again.g w w
also work now.
- Fix:
g q q
now work again.g w w
also work now.
- New, Breaking: Operator
reflow-with-stay
. #818reflow-with-stay
isg q
equivalent feature. but unlikeg q
,g w
keep cursor at same position.- It auto-format each lines to fit with
editor.preferredLineLength
. - Breaking: Existing command for
g q
wasauto-flow
, but renamed toreflow
at this timing. - If you enabled,
stayOnTransformString
config,g q
andg w
behave exactly same way.
- Improve: #819 TextObject function now work for both
language-rust
andatom-language-rust
.
- New: Pane manipulation commands
ctrl-w H
,ctrl-w J
,ctrl-w K
,ctrl-w L
.- These feature are merged from my
paner
package. - Following keymaps are provided in
atom-workspace
scope.ctrl-w ctrl-x
orctrl-w x
:vim-mode-plus:exchange-pane
ctrl-w K
:vim-mode-plus:move-pane-to-very-top
ctrl-w J
:vim-mode-plus:move-pane-to-very-bottom
ctrl-w H
:vim-mode-plus:move-pane-to-very-left
ctrl-w L
:vim-mode-plus:move-pane-to-very-right
- These feature are merged from my
- Fix: No longer throw exception when accessing unsupported register via
insert-mode
'sctrl-r
(insert-mode
) #812. - Support: set minimum engines to
1.18.0
.
- Improve: Improve Fold handling in several operations. #809.
y y
,d d
now yank/delete whole fold.o
now start insertion from next line of end-of-fold(OLD-ver was next line of start-of-fold).V
on folded row select whole fold, soV d
delete multiple lines which was folded.- No longer show cursor at incorrect row when
V
on folded row(long lived cosmetic issue now FIXED).
- No longer show cursor at incorrect row when
p
on folded row paste next line of end-of-fold(OLD-ver was next line of start-of-fold).
- New: Add several Fold manipulation commands. #807
- Commands:
z c
:fold-current-row
z C
:fold-current-row-recursively
z o
:unfold-current-row
z O
:unfold-current-row-recursively
z a
:toggle-fold
z A
:toggle-fold-recursively
- Previously
z c
,z o
was mapped to following Atom's native fold commands. But now replaced withvmp
's one. - Why? for consistency, and vmp's one is multi-cursor aware, linewise selection aware(not manipulate next line of selected row).
z c
:editor:fold-current-row
z o
:editor:unfold-current-row
- Commands:
- Improve, Experimental: Hide, left/right dock when
maximized-pane
. - Improve: Disable
maximized-pane
keymap(cmd-enter
) intree-view
scope. - Keymap, Breaking: Remove default
ctrl-v
keymap in search-mini-editor to avoid conflicts. #791- Previous version have following keymap(was experimental, you can recover this by set manually).
- scope:
atom-text-editor.vim-mode-plus-search
- keystroke:
ctrl-v
tovim-mode-plus:search-activate-literal-mode
- scope:
- Previous version have following keymap(was experimental, you can recover this by set manually).
- Fix: Protect from
p
throw exception in some uncertain situationp
#802. - Fix: [Atom-v1.19-beta] Smooth scroll now work again.
- This issue is introduced by the big change in editor-rendering rewrite in v1.19.
- Fix: [Atom-v1.19-beta],
ctrl-y
on first line of editor incorrectly mutate that row(do nothing is correct behavior) #808 - Fix: [Atom-v1.19-beta]
ctrl-y
,ctrl-e
now correctly use 2 lines offset. - Keymap: Make numpad0-9 behave same way as normal 0-9 key #806
- Improve?, Breaking: Remove angle-bracket(<,>) matching for
%
motion. refs #700- Still work in progress to improve behavior.
- Spec: Fix spec failure in v1.19.0-beta.
- New:
count
support forg t
to activate Nth pane item(= tab).3 g t
activate 3rd pane item.7 g t
activate 7th pane item.g t
just activate next pane items as previous version.- When specified pane items was not exist, do nothing.
- Limitation: vim-mode-plus's command only works on normal text-editor.
- You can not do
g t
on non editor pane Item such assetting-view
.
- You can not do
- Fix: #766 executing
maximize-pane
on single-pane workspace make screen blank.- This was happening only when pane have not yet split once after atom launch.
- Fix: #777
J
at last buffer row no longer clear text. - Doc: mention ex-mode link on README.md since it's now support vim-mode-plus.
- Improve: #782 Skip creating marker/decoration for empty range in hlsearch and incsearch.
- E.g.
- When user searched
()
literally, it matches empty-range between each char. - In previous release, invisible hlsearch/incsearch marker/decoration was created.
- By skipping this empty range highlight, improve responsiveness when user repeat
n
orN
for that search.
- When user searched
- E.g.
- Fix: blockwise-selection was not cleared correctly in some situation(but I noticed via code review)
- Fix: #780 No longer throw exception when close editor in the middle of smooth scrolling.
- New: #770, #774 Add fold manipulation commands based on PR by @weihanglo.
- Commands: Put non-NEW commands here for thoroughness.
z a
:toggle-fold
, toggle( fold or unfold ) cursor's fold.( NEW )z r
:unfold-next-indent-level
, unfold deepest folded fold. support count.( NEW )z m
:fold-next-indent-level
, fold deepest unfolded fold. support count.( NEW )z M
:fold-all
, unfold all fold.( not NEW )z R
:unfold-all
, fold all fold.( not NEW )
- Setting:
maxFoldableIndentLevel
( default20
)- Folds which startRow exceeds this level are not folded on
zm
andzM
- e.g.
- If you have 3 folds in editor, each fold starts following indentLevel.
fold-a: 0
fold-b: 1
fold-c: 2
maxFoldableIndentLevel = 20
:z M
fold allz m
foldfold-c
,fold-b
,fold-a
on each time.
maxFoldableIndentLevel = 1
:z M
foldfold-a
z m
foldfold-b
,fold-a
on each time.
maxFoldableIndentLevel = 0
:z M
foldfold-a
only.z m
foldfold-a
.
- If you have 3 folds in editor, each fold starts following indentLevel.
- Folds which startRow exceeds this level are not folded on
- Implementation is NOT exactly same as pure-Vim.
- Pure-vim: explicitly manage
foldlevel
value andzm
,zr
is done based onfoldlevel
kept. - vmp: Does not manage
foldlevel
explicitly, instead it detect fold state from editor.- This approach gives better compatibility for Atom's native fold commands like
cmd-k cmd-1
- This approach gives better compatibility for Atom's native fold commands like
- Pure-vim: explicitly manage
- Commands: Put non-NEW commands here for thoroughness.
- Improve: Don't auto-load
vimState.highlightSearch
when nothing to highlight. - Internal: #768 Support upcoming new decoration
type: 'cursor'
for cursor visibility in visual-mode. - Internal: #763 add spec for ensure minimum required file on vmp startup.
- Improve, Performance: Reduce amount of IO( number of files to read ) on startup further. #760
- Avoid require on initial package activation. Especially following widely-used libs is not longer
require
d on startup.lib/selection-wrapper.coffee
lib/utils.coffee
underscore-plus
- Now
swrap
andutils
are accessible via lazy-prop(vimState.utils
andvimState.swrap
).
- Avoid require on initial package activation. Especially following widely-used libs is not longer
- Developer: When
debug
setting was set totrue
, log lazy-require info when atominDevMode
.
- Fix: For
search
on initial active-editor after startup,highlightSearch
did not happened.- This is regression introduced as part of lazy instantiation of
HighlightSearchManager
.
- This is regression introduced as part of lazy instantiation of
- Fix: Sorry, removed leftover
console.log
in atom running in dev mode.
- Improve: Reduce activation time of vim-mode-plus to reduce your frustration on Atom startup. #758
- About 2x faster activation time( Full detail is on #758 ).
- With Two technique
- Define all vmp-command from pre-populated command-table and lazy-require necessary command file on execution.
- Defer instantiation of xxxManager referred by
vimState
.- E.g.
vimState.highlightSearch
is instance ofHighlightSearchManager
and it's now set on-demand.
- E.g.
- [For vmp developer only] If command signature was changed, need update command-table.
- Command signature it's name and scope(e.g.
vim-mode-plus:move-down
andatom-text-editor
) - [Caution]
write-command-table-on-disk
command is available only when atom running in dev-mode. - [Caution] Directly update
lib/command-table.coffee
if populated-table was changed from loaded one.
- Command signature it's name and scope(e.g.
- New, Breaking: Default keymap update #753
- macOS user only
ctrl-s
mapped totransform-string-by-select-list
innormal-mode
andvisual-mode
- All user
z
inoperator-pending
is short hand ofa z
(a-fold
).- You can do
y z
instead ofy a z
. E.g. When you yank foldable wholeif
block. - You can do
c z
instead ofc a z
. E.g. When you change foldable wholeif
block.
- You can do
g r
mapped toreverse
g s
mapped tosort
g c
mapped toselect-latest-change
which correspond tog v
(select-previous-selection
)g C
mapped tocamel-case
- What was broken?
Before:
g c
was forcamel-case
,g C
was forpascal-case
. Now:g c
is forselect-latest-change
,g C
is forcamel-case
. No defaultpascal-case
.
- macOS user only
- New: Target alias for surround #751, #755
- Now
b
,B
,r
,a
char is aliased to corresponding target.b
is alias for(
or)
B
is alias for{
or}
r
is alias for[
or]
a
is alias for<
or>
( I don't like this, just followed howsurround.vim
is doing ).
- These alias can be used in
surround
,delete-surround
,change-surround
.- When have these keymap:
surround
(y s
),delete-surround
(d s
),change-surround
(c s
)y s i w b
is equals toy s i w (
.y s i w B
is equals toy s i w {
y s i w r
is equals toy s i w [
y s i w a
is equals toy s i w <
- When have these keymap:
- Now
- New: InnerPair pre-targeted
rotate
command- Commands:
rotate-arguments-of-inner-pair
rotate-arguments-backwards-of-inner-pair
- No keymap by default.
- E.g.
- When you map
g >
torotate-arguments-of-inner-pair
andg <
tobackwards
- You can rotate arg of parenthesis by
g >
and.
if necessary,g <
for backwards.
- When you map
- Commands:
- Internal: Cleanup
developer.coffee
and remove unused dev commands.
- New: Text-object for arguments
- Keymap:
i ,
:inner-arguments
a ,
:a-arguments
,
:inner-arguments
( shorthand keymap available only in operator-pending-mode )
- Example:
c i ,
( you can doc ,
)d i ,
( you can dod ,
)d a ,
v a ,
- From where this text-object find arguments?
- Auto-detect inner range of
()
,[]
,{}
pairs and parse argument and select. - When it failed to find inner-pair range, it fallbacks to current-line range.
- Auto-detect inner range of
- How to determine separator of arguments?
- Heuristically determine separator from comma
,
or white-space.- When some separator contains comma, it treat comma as separator.
- When no separator contains comma, it treat white-space as separator.
- Heuristically determine separator from comma
- Keymap:
- New, Setting: #747 Conditional keymap setting
keymapPToPutWithAutoIndent
.- When enabled,
p
, andP
paste with-auto-indent for linewise paste. - Why I added this helper setting?
- You can set keymap by yourself in your
keymap.cson
- But you need to be careful to not overwrite
p
inoperator-pending-mode
.
- But you need to be careful to not overwrite
- In
normal-mode
,p
is mapped toput
. - In
operator-pending-mode
,p
is mapped toinner-paragraph
, as shorthand ofi p
. - When set
p
keymap in yourkeymap.cson
without breaking predefined shorthandp
. - You need to exclude
operator-pending-mode
scope like this.'atom-text-editor.vim-mode-plus:not(.insert-mode):not(.operator-pending-mode)': 'p': 'vim-mode-plus:put-after-with-auto-indent'
- But I don't think I can expect normal user to do so. So
- You can set keymap by yourself in your
- When enabled,
- New:
rotate
,rotate-backwards
operator- No keymap by default.
- ChangeOrder family operator, which rotate line in
linewise
, argument incharactewise
.
- New: #748 ChangeOrder family( child ) operator now work differently for charactewise-target.
- Affects:
reverse
,rotate
,rotate-backwards
,sort
,sort-case-insensitively
,sort-by-number
- [Same]: When
linewise
target, it change order of line. - [New]: When
characterwise
target, it auto-detect arguments and change order of arguments within characterwise-range.
- Affects:
- New: Operator
split-arguments
andsplit-arguments-with-remove-separator
- Commands:
split-arguments
: split arguments into multiple-lines within specified target without removing separator.split-arguments-with-remove-separator
: behave same assplit-arguments
but it remove separator(sugh as,
).
- Keymap
g ,
tosplit-arguments
by default( aggressive decision ).- Pure-Vim's
g ,
is "move to newer cursor position of change list", but vmp have nochangelist
anyway.
- Pure-Vim's
- Commands:
- New: [Experimental] Added
inner-pair
pre-targeted version ofsplit-arguments
andreverse
to evaluate it's usefulness.- No keymap
- Commands:
split-arguments-of-inner-any-pair
reverse-inner-any-pair
- Breaking: Remove
showCursorInVisualMode
setting- Notify and ask confirmation for auto-remove from
config.cson
if it set to non-default value.
- Notify and ask confirmation for auto-remove from
- Improve:
r enter
to replace with new-line now correctly auto-indent inserted new-line. - Improve: When
surround
linewse-target, now auto-indent surrounded lines more accurately than previous release.
- Doc: New wiki page
- DifferencesFromPureVim
- VmpUniqueKeymaps
- Keymaps: Normal keymap addition
- New: Now
subword
text-object have default keymap, you can change subword byc i d
.i d
:inner-subword
a d
:a-subword
cmd-a
is mapped toinner-entire
inoperator-pending
andvisual-mode
for macOS user.- So macOS user can use
cmd-a
as shorthand ofi e
(inner-entire
). - E.g. Change all occurrence in text by
c o cmd-a
instead ofc o i e
- So macOS user can use
- New: Now
- Keymaps: Shorthand keymaps in
operator-pending
mode- Prerequisite
- In
operator-pending-mode
, next command must betext-object
ormotion
- So all
operator
command inoperator-pending-mode
is INVALID. - This mean, we can safely use operator command's keymap in
operator-pending-mode
as shorthand keymap oftext-object
ormotion
. - But using these keymap for
motion
is meaningless since motion is single-key, but text-object key is two keystroke(e.g.i w
). - So I pre-defined short-hand keymap for text-object which was work for me.
- In
- What was defined?
c
as shorthand ofinner-smart-word
, butc c
is not affected.- You can
yank word
byy c
instead ofy i w
. ( change byc c
if you enabled it in setting ) - To make
c c
works forchange inner-smart-word
, setkeymapCCToChangeInnerSmartWord
totrue
(false
by default ) smart-word
is similar toword
but it's include-
char.
- You can
C
as shorthand ofinner-whole-word
- You can
yank whole-word
byy C
instead ofy i W
. ( change byc C
)
- You can
d
as shorthand ofinner-subword
, butd d
is not affected.- You can
yank subword
byy d
instead ofy i d
. ( change byc d
)
- You can
p
as shorthand ofinner-paragraph
- You can
yank paragraph
byy p
instead ofy i p
. ( change byc p
)
- You can
- Prerequisite
- Keymaps: Conditional keymap enabled by setting.
- Prerequisite
- Added several configuration option which is 1-to-1 mapped to keymap.
- When set to
true
, corresponding keymap is defined. - This is just as helper to define complex keymap via checkbox.
- For me, I enabled all of these setting and I want strongly recommend you to evaluate these setting at least once.
- These keymaps are picked from my local keymap which was realy work well for a log time.
- Here is new setting, all
false
by default. Effect(good and bad) of these keymap is explained in vmp's setting-view.keymapUnderscoreToReplaceWithRegister
keymapCCToChangeInnerSmartWord
keymapSemicolonToInnerAnyPairInOperatorPendingMode
keymapSemicolonToInnerAnyPairInVisualMode
keymapBackslashToInnerCommentOrParagraphWhenToggleLineCommentsIsPending
- Prerequisite
- Breaking: Default setting change:
clearPersistentSelectionOnResetNormalMode
:true
(false
in previous version )clearHighlightSearchOnResetNormalMode
:true
(false
in previous version )highlightSearch
:true
(false
in previous version )useClipboardAsDefaultRegister
:true
(false
in previous version )
- New: #743, #739 New config option
dontUpdateRegisterOnChangeOrSubstitute
( defaultfalse
).- When set to
true
, allc
,s
,C
,S
operation no longer update register content. - If you want keep register content unchanged by
c i w
, set this tofalse
.
- When set to
- New: TextObject
comment-or-paragraph
for use of easy comment-in/out wheng /
is pending. - Fix: For commands
set-register-name-to-*
orset-register-name-to-_
, now show hover and correctly setwith-register
CSS scope on editorElement. - Fix, Improve: #744 Make vmp work well with other atom-pkg or atom's native feature.
- Update selection prop on command dispatch of outer-vmp command
- Now correctly update cursor visibility and start
visual-mode
aftercmd-e
thencmd-g
.
- Now correctly update cursor visibility and start
- Update selection prop if editor retake
focus
.- Now correctly start
visual-mode
aftercmd-f
result was confirmed byenter
.
- Now correctly start
- Update selection prop on command dispatch of outer-vmp command
- Improve: Better integration with
demo-mode
package- Postpone destroying operator-flash while demo-mode's hover indicator is displayed.
- Improve: When undo/redoing occurrence operation, flash was suppressed when all occurrence start and end with same column, but now flashed.
- Improve: Improve containment check for
togggle-preset-occurrence
- When cursor is at right column of non-word char(e.g. closing parenthesis
)
), not longer misunderstand that cursor is on occurrence-marker.
- When cursor is at right column of non-word char(e.g. closing parenthesis
- Internal: #742 Rewrite
RegisterManager
, reduced complex logic which make me really confuse.
- New: #732 Add integration with
demo-mode
package.demo-mode
is new Atom package I've released recently, it was originally developed as part of vim-mode-plus.- When demo-mode is activated via
demo-mode:toggle
, vmp do special integration to- Make operator flash duration longer than normal duration
- Demo-mode hover indicator show
keystorke
,command
andkind
(extra info added by vmp) on each keybinding dispatch.- kind is one of
operator
,text-object
,motion
,misc-command
- kind is one of
- New: #722 New version of put command which paste content to suggested indent level with keeping pasting text layout.
- PR by @apazzolini
- Normal
p
,P
paste content as-is, so ignores desirable( or suggested ) indent level. - Following two command respect suggested indent level on linewise paste( no diff for characterwise paste ).
vim-mode-plus:put-before-with-auto-indent
: Same asput-before
(P
) with respect suggested indent level.vim-mode-plus:put-after-with-auto-indent
: Same asput-after
(p
) with respect suggested indent level.
- No keymaps provided by default
- Improve:
o
,O
to adjust IndentLevel wheno
,O
is executed from empty row #723- PR by @apazzolini
- To provider further pure-Vim compatible behavior.
- Improve: #727 Tweak incremental-search match highlight style to not hide covering text in some syntax-theme.
- Fix: #725 Now
v
( orV
orctrl-v
) thenescape g v
correctly re-select previously selected range. - Improve: #726 Relax selection-property assertion.
- Fix: #716 No longer throw error when confirming color via color-picker then
escape
.
- Fix: #716 No longer throw error when confirming color via color-picker then
- New:
insert-at-start-of-subword-occurrence
andinsert-at-end-of-subword-occurrence
command.- Start insert at start or end of
subword
occurrence. - E.g
- When I map
{
, and}
to these command innormal-mode
.{ f
: start insert at each start of subword-occurrence within function.} f
: start insert at each end of subword-occurrence within function.{ p
: start insert at each start of subword-occurrence within paragraph.
- When I map
- Start insert at start or end of
- Internal, Breaking: Remove
did-restore-cursor-positions
hook which was used in Operator code but no longer used. - Internal, Breaking: Remove many of simple accessor method like
getName
,getOperator
, now just use@name
,@operator
to access these values. - Improve: Hide cursor on early select
- For
supportEarlySelect = true
operator(surround
,replace
). - These operator began to shows cursor on early-select from Atom v1.15, but now hide again for early-select timing.
- For
- Internal, Dev: #719 No longer use
HTMLElement
as search-input for speedy dev by hot-reload vmp. - Internal, Breaking: Move
InsertMode
(was ininsert-mode.coffee
) operations underMiscCommands
( inmisc-commands.coffee
) - Improve: Keep original multi-cursor on occurrence operation by migrating mutation info.
- Improve: Simplify mark manager and destroy all marker on
vimState.onDidDestroy
. - Improve: Clean up mutationManager.
- Fix, Internal: Now do TYPE check for spec-helper's
ensure
function's argument, some test was silently skipped in previous release.
- Fix, SUPER Critical: #175 Moving cursor in
visual-mode
make Atom editor really slow.- vmp's mark is stored as marker and was created limitlessly without destroying previous-marker.
- As number of marker increased, editor get really slow.
- This is old Bug from original vim-mode, but impact get really significant from v0.58.0.
- Since from v0.58.0, to track previousSelection(used for
g v
)<
and>
mark is updated on everyvisual-mode
movement.
- Since from v0.58.0, to track previousSelection(used for
- Fix: When
stayOnYank
was enabled,y 0
,y h
no longer move cursor. - Fix: [Cosmetic but important] Fix very small cursor position jump( cosmetic ) when activating vL ( because of gap between px and em? )
- Fix: Respect
v
operator-modifier fort
( Till ) motion.- e.g. In text "ab" when cursor is at "a"
- Old:
d t b
delete "a"( Good ),d v t b
delete "a"( Bad ). - New:
d t b
delete "a"( Good ),d v t b
don't delete "a"( Good ).
- Old:
- e.g. In text "ab" when cursor is at "a"
- Improve: Now can select line ending new line char in
visual-mode
.- E.g. Move right by
l
at end of line select new-line.
- E.g. Move right by
- Fix: #699 Lost goalColumn in
visual.blockwise
when move across blank-row.- This is regression in v0.84.0.
- Fix: #119 When
j
,k
is used as operator's target, don't apply operation when failed to move.- Now more compatible with pure Vim.
- Example:
d j
from last line do nothing. ( In previous version, delete last line ).d k
from first line do nothing. ( In previous version, delete first line ).
- Improve:
g v
aftervL
( visual-linewise ) to restore characterwisecolumn
. - Fix:
v i p d
then.
repeat from different cursor position now works correctly - Internal:
- Overhaul:
CursorStyleManager
,SelectionWrapper
,TextObject
,BlockwiseSelection
- Rename
characterwiseHead
topropertyHead
inspec-helper.coffee
- Remove lots of unnecessary
null
guard.
- Overhaul:
- Breaking: Remove
All
text-obect, it's alias ofEntire
but not used. - Breaking: Remove
Edge
text-object, it's experimentally added in the past, but not maintained and not as useful as I originally thought. - Improve: TextObject
- Improve: No longer iterate
selectTextObject
over each memberSelection of blockwise selection( blockwiseSelection consists of multiple selection ). - Improve:
Fold
,Function
text-object now always expand if possible by checking containment against selected buffer range - Improve:
Pair
text-object now always find from cursor position. - Improve: Executing text-object from
vL
mode now works as expected in most of text-object. - Internal: Set wise explicitly in most of text-obect rather than dynamically determine from selection range.
- Internal: Auto generate
Inner
, orA
prefixed classes andAllowForwarding
suffixed classes( reduced lots of boilerplate code ).
- Improve: No longer iterate
- Improve: visual-blockwise (
vB
-mode )- #699 Fix: Now respect goalColumn in
vB
when move across blank row byj
ork
.- Regression introduced in v0.84.0.
- #704 Rewrite vB-mode related code.
- vB selection is normalized before selecting text-object.
- So no longer iterate
selectTextObject
over each memberSelection of blockwise selection.
- Improve: #438 when vB selection respect
goalColumn
- Original goalColumn is respected as long as selection-head is right-most column.
- #699 Fix: Now respect goalColumn in
- Fix: To fix vim-mode-plus-move-selected-text degradation.
- Fix, Improve: #689 Occurrence was not worked for the word which include non-word char such as
$
and@
.- E.g.
$var
in Perl, PHP. - This was because when finding occurrences, it searched by
\bword\b
pattern. - But
\b\$var\b
never match$var
, in this case find by\$var\b
pattern from this release( auto relax\b
boundary ).
- E.g.
- Improve: Preserve fold on
g v
- Internal:
- Cleanup selection-wrapper code.
- Remove unused functions from
utils.coffee
- Support: set minimum engines to
^1.14.0
- Fix: When
o
was executed invL
mode, didn't correctly restore column on shift tovC
ornormal
.- Now correctly restore
characterwise
column aftero
inlinewise
mode.
- Now correctly restore
- Improve:
g .
correctly restore subword-occurrence-markerg .
(vim-mode-plus:add-preset-occurrence-from-last-occurrence-pattern
) is command to restore last cleared preset-occurrence.- It is useful when you mistakenly cleared it by
escape
and quickly recover last preset-occurrence marker. - Previously
preset-subword-occurrence
was not correctly restored byg .
, but now fixed.
- Improve: Use faster
displayMarkerLayer::clear()
for hlsearch, occurrence-manager, search-model etc. - Internal: add
dev
prefix for setting for dev-use. - Internal: Remove lots of unused function in
utils.coffee
. - Internal: add
vimState::getConfig
to access package settings.
- Fix:
move-to-previous-subword
stops boundary of white-space unnecessarily( upstream issue auto-fixed)- Spec to accommodating wrong behavior removed.
- Fix:
B
moves to beginning of file when invoked from begging of line.- Introduced by upstream change in Atom v1.14.0( or v1.14.1?).
- Fix: No longer throw exception when
showHoverSearchCounter
is enabled and editor was closed immediately after hover counter was shown.
- Fix:
p
,P
in vB-mode no longer throw exception #672- This bug was introduced in v0.80.0.
- New: command
move-up-wrap
,move-down-wrap
,j
,k
with line wrap( top-to-bottom/bottom-to-top ).- No keymap by default. intended to use from atom-narrow package(now I'm actively developping).
- Improve, Breaking: Remove
fallbackTabAndShiftTabInNormalMode
- This was necessary since
tab
,shift-tab
was mapped tomove-to-next-occurrence
andmove-to-previous-occurrence
. - When
true
, fallbacktab
,shift-tab
toeditor:indent
oreditor:outdent-selected-rows
when nooccurrence-marker
exist. - But now, these mapping is defined in
has-occurrence
scope, which meansoccurrence-marker
exists on editor. - So your
tab
,shift-tab
is no longer conflict if nooccurrence-marker
exits.
- This was necessary since
-
Breaking: Disable
I
,A
special keymap inhas-occurrence
scope.- To avoid surprising user. Now behave as normal
I
amndA
. - To insert start/end of each occurrences, use
visual-mode
select thenI
orA
. - Or set keymap in your
keymap.cson
to restore previous verison's keymap.'atom-text-editor.vim-mode-plus.has-occurrence:not(.insert-mode)': 'I': 'vim-mode-plus:insert-at-start-of-target' 'A': 'vim-mode-plus:insert-at-end-of-target'
- To avoid surprising user. Now behave as normal
-
Fix: No longer throw exception when specified register has no value(=text) on
p
,P
operation. #656. -
Fix: Now
selection
properties cleared on each normal-mode operation finish to avoid hover counter is shown at incorrect position. -
Developer: Spec helper
ensureMode
no longer mutate passed array itself. -
Developer:
reload-packages
command now reload depending packages in correct order.
- Fix: #653 Immediately close search-mini-editor when main editorElement was clicked to avoid stale decorations remains on editor.
- Fix: Move to next subword no longer throw error in some ending string pattern.
- Improve:
move-to-next-word
and it's child motion now skip white-space only row(compatible with pure-Vim).
- Fix: #647 Ensure clearing blockwise selection after
.
repeating blockwise operation. - Fix: #537 When
persistent-selection
is exists,I
invisual-blockwise
, make selected range get wired. - Fix: In atom 1.14-beta, when
IncrementalSearch
was enabled,/
throw exception #652 - Improve: #646 Improve
TagFinder
to find enclosed range first - Internal: Extract normalization/denormalization of
linewise
,characterwise
selection to selection-wrapper - Internal: Improve spec helper
- Introduce cursorScreen for spec-helper for explicitness
- Now
cursor:
is bufferPosition-wise - #650
textC
no longer ensure order of cursors appear
- New: TransformString Operator
sort-case-insensitively
by @thancock20 #640 - Fix:
v *
thenn
orN
in different editor no longer throw error #641. - Improve: Pair text-object
- Internal: Use new
PairFinder
class to find pair range(extracted fromtext-object.coffee
). - Improve: Bracket TextObject:
(, )
,{, }
,[, ]
,<, >
- Find range by considering syntax-scope. #644.
- Improve: Quote TextObject:
'
,"
etc..- Simply find quote if cursor is NOT in quote char #173, #638
- If cursor is ON quote char consider inside/outside of double-quote #556, #642
- Internal: Use new
- Improve: Fold text-object(
i z
,a z
) no longer ignore fold on cursor's row. #636 - Internal: New
Base::scanForward
,Base::scanBackward
and use it - Internal: Lots of internal code cleanup(
utils.coffee
,text-object.coffee
etc.)
- New: Subword support #634
- Motion:
move-to-next-subword
,move-to-previous-subword
,move-to-end-of-subword
' - TextObject:
a-subword
,inner-subword
(no keymaps by default) - OperatorModifier:
O
works as likeo
, exceptO
works for subword.(e.g.c O p
) g O
(toggle-preset-subword-occurrence
) mark subword, subword-version ofg o
.
- Motion:
- New: TransformString family operator
split-string-with-keeping-splitter
,sort-by-number
( no keymap ) - New
g q
(auto-flow
) operator,g q q
org q g q
works for current line #187- Implementation-wise, it just dispatch to core autoflow package. So might not be compatible with pure-Vim.
- Improve:
maximize-pane
#633- Tweak: Now set
left-margin
(20%
) when maximized, so that code comes front of your eye. - Now hide statusbar.
- New: option
hideStatusBarOnMaximizePane
(defaulttrue
).
- Tweak: Now set
- Tweak: Support #627 earlySelect for operator
replace
- Improve: Early settle insertion count for insertion operator(
i
a
) to avoid taking count for motion. - Fix: Now
v enter
then.
repeated correctly create 1 column persistent #630 - Fix:
ctrl-v enter .
no longer throw error #630 - Spec: Improve coverage for
TransformString
children(join
etc..) - Internal: Rewrite
ctrl-a
,ctrl-x
,g ctrl-a
,g ctrl-x
- Breaking: No longer beep when failed.
- Breaking, Cosmetic: Remove
showHoverOnOperate
feature #626- Reason:
- This is fancy feature added at very early phase of vim-mode-plus as experiment.
- But this feature getting in a way to improve, cleanup vim-mode-plus.
- Removed Configuration: Following parameters are removed, remove it manually from
config.cson
if necessary.showHoverOnOperate
showHoverOnOperateIcon
- Reason:
- New: [Experimental]
surround
now select target immediately then get user input.- Better UI feedback, to reduce
what-I-have-to-do-next
,where-am-I
situation in complex keystroke operation. - When
change-surround
fail at first character, it immediately stop execution( No need to input useless next char ).
- Better UI feedback, to reduce
- Fix:
maximize-pane
now work for many many split pane #623. - Improve: Hover performance is greatly improved #625
- Hover shown in
1 0 j
," a y y
,change-surround
is now responsive than before. - HoverElement is renamed to HoverManager(no longer HTMLELement).
- Hover shown in
- Improve:
undo
/redo
flashing humanization further. - Improve: Tweak search flashing to win over existing
highlight-search
. - Internal: Cleanup occurrence-spec, avoid using
editor.element
for mini-editor.
- New:
setCursorToStartOfChangeOnUndoRedoStrategy
(defaultsmart
) #620, #621 - New:
remove-leading-white-spaces
( no defautl keymap ): work alwayslinewise
. - New, Breaking:
replace
is now normal operator which enteroperator-pending-mode
, oldreplace
command was renamed.- OldName:
vim-mode-plus:replace
( mapped fromr
) - NewName:
vim-mode-plus:replace-character
( mapped fromr
)
- OldName:
- Fix:
m
command was inappropriately repeatable by.
- Fix: No longer throw exception for
V tab
orV shift-tab
#619 - Improve: Respect operator specific
stayOn
option whenstayOnOccurrence
wastrue
and fail to selectoccurrence-marker
. - Improve:
d o p
moves cursor to end of mutation as normald
#611 - Improve:
undo/redo
- Cursor placement on
undo
/redo
further.o
andO
undo/redo is now behave same as pure-Vim.
- Flashing is further suppressed to be un-noisy. Also humanize new line(
\n
) change flash to feel naturally.- Skip flash for leading white spaces change
- Skip flash when multiple range start and end with exactly same column(e.g.
toggle-line-comments
).
- Cursor placement on
- Improve:
transform-smart-word-by-select-list
now respect precomposed target of each string transformer.- E.g.
SplitString
have precomposed target( =MoveToRelativeLine
), respect it oversmart-word
target.
- E.g.
- Internal: Remove manual checkpoint and change grouping management from normal operator as like before(was not necessary).
- Improve: More accurate cursor placement after undo/redo. #603
- IMPORTANT, new approach to restore cursor position after undo/redo.
- Previous release: Did manual-cursor-position-adjustment after undo/redo
- From this release: Create text-buffer's checkpoint at correct timing then restore on undo/redo.
- Checkpoint mechanism was being used for long time for
i
,a
,c
, from this release used operator globally. - This shift is not completed, will continue gradual improvement.
- IMPORTANT, new approach to restore cursor position after undo/redo.
- Improve: Use different color on
flashOnUndoRedo
#610- Single change: subtle color flash with duration
0.3s
(singe delete-only change is no longer flashed). - Multi change add: green flash with duration
0.8s
- Multi change delete: red flash with duration
0.8s
- Single change: subtle color flash with duration
- Improve:
p
,P
#615- Improve: Flash color differentiation on
p
,P
(use longer flash to make it obvious mutation boundary). - Breaking: Simplified linewise paste, when line have no ending newline, it add newline automatically
- Improve: Pasting characterwise register now place cursor at start of pasted text if text was not single-line-text.
- Improve: Flash color differentiation on
- Improve: Now Indent(
>
), Outdent(<
) indent/outdent count times invisual-mode
#614 - Improve, Breaking: Improve
insert-at-start/end-of-smart-word
, now no longer stop at whitespace boundary. #613- Breaking: Renamed command name(as same as previous release, no default-keymap)
insert-at-start-of-inner-smart-word
->insert-at-start-of-smart-word
insert-at-end-of-inner-smart-word
->insert-at-end-of-smart-word
- Breaking: Renamed command name(as same as previous release, no default-keymap)
- FIX: Incorrectly used
occurrence-flash
ifoccurrence-marker
exists but not selected by operation. - Breaking: Remove experimental
put-after-and-select
,put-before-and-select
command #612 - Internal: When fail to select occurrence
did-select-occurrence
event no longer fired(was fired in previous release). - Internal: Rename register type name from
character
tocharacterwise
for consistency.
- Fix:
C
andD
invB
(visual-block) mode was broken from v0.70.0. #602. - Fix:
d o tab
then.
repeat no longer fail #598 - Improve: Simplify flash for undo/redo, red color is used for remove-only-change #601
- Improve, New: fallback for
tab
,shift-tab
innormal-mode
.- By default in
normal-mode
,tab
andshift-tab
is mapped tomove-to-occurrence
andmove-to-previous-occurrence
- When no occurrence-marker was exists on editor, it fallbacks to Atom's default
editor:indent
,editor:outdent-selected-rows
. - For user don't want this fallback, set
fallbackTabAndShiftTabInNormalMode
tofalse
(defaulttrue
).
- By default in
- New: Close empty search-mini-editor by
backspace
from @gittyupagain. #567 - New, Breaking: Keep
occurrence-marker
after operation. #572- Improve: Destroy
occurrence-marker
remains after invalidated. - Breaking: Operate on normal-target when fail to select
occurrence-marker
. #578, #579 - Improve: Destroy
occurrence-marker
in-sync if possible #592
- Improve: Destroy
- New: [experimental] Operator
add-blank-line-below
,add-blank-line-above
, No defaut keymap. #574 - New, Breaking:
I
,A
keymap in operator-pending(d I
ford ^
,d A
ford $
). - New: Simplify
tab
,shift-tab
, #581, #594- Keymap, Breaking: Mapped in all mode except
insert-mode
, opinionated decision.tab
:move-to-next-occurrence
shift-tab
:move-to-previous-occurrence
- New: Setting
flashOnMoveToOccurrence
, defaultfalse
. - Improve: Now correctly skips cleared or invalidated(=invisible)
occurrence-marker
. #594 - Improve:
.
repeat support formove-to-occurrence
targeted operation #591 - Improve: Spec coverage.
- Keymap, Breaking: Mapped in all mode except
- Fix: text-objects function now work properly in language-elixir syntax by @dillonkearns. #585
- Fix: To undo repeat-of-change need
u
twice in v0.72.0. - Fix: When
has-occurrence
,I
,A
was incorrectly keymapped ininsert-mode
. - Fix: Prevent Atom editor freezes by passing BIG count. #560, #596
- For Motion(
9999999j
), TextObject:v9999999ip
and Insert:9999999i
- For Motion(
- Improve: Flashing
- Use red flash color for delete operation #573
- Longer flash for undo/redo(by keyframe tweaking).
- Improve: Reduce chance to re-flash immediately split after undo by reducing duration(1sec to 500ms).
- Improve: Documentation, description
- Improve config description
- Add FAQ for
charactersToAddSpaceOnSurround
- Mention
vim-mode-plus-keymaps-for-surround
keymap only package in README.md.
- Internal, Breaking: [experimental] No longer directly call
Motion::select()
from operator #595 - Internal: Spec improved
textC
spec DSL which declare cursor position by|
and!
(last-cursor)- Rewrite several specs by improving granularity by checking cursor position(was not checked before)
- Allow
partialMatchTimeout
options for ensure and keystroke spec helper
- New: Command
add-preset-occurrence-from-last-occurrence-pattern
defaultg .
keymap. - New: Command
insert-at-start-of-occurrence
,insert-at-end-of-occurrence
- New: Config parameter
stayOnOccurrence
to specify stayOn behavior on occurrence-operation. #569. - New: unused and unnecessary indirection
- Improve: Efficiency improved for cursorStyleManager. Skip cursor style modification if it can,
- Improve, Breaking:
AngleBracket
now can work with multi-line #552- TextObject
Tag
is no longer member ofAnyPair
. Since its conflict withAngleBracket
- TextObject
- Improve, Fix: No longer unwanted remaining flash by
flashOnOperate
since now it's invalidate when touched. - Improve: Flash color is more stand-out when occurrence-operation #566
- Improve: For flashing undo/redo, no longer red/green color blended when whichever is contained other #562
- Improve: Place cursor more accurately for undo/redo when occurrence is involved.
- Improve: Respect last cursor position when multiple cursor is cleared by
escape
innormal-mode
. #557, #562 - Improve: When occurrence is involved in operation, respect original cursor position after operation finished. #557
- Improve: highlight when highlightSearch changed like on, off, on
- Fix:
toggle-preset-occurrence
should not accept persistentSelection but it was in previous release. - Fix: highlightSearch no longer extend highlight marker on appending text on tail #555
- Internal: All vimState instances are managed by VimState class itself.
- Internal: New convention. Ensure
ActivateInsertMode
and it's child call@selectTarget()
before starting any mutation.
- New:
moveToFirstCharacterOnVerticalMotion
options #550, #549- Default:
true
, if you disable, column position is kept after these motion. - Similar to
startofline
option in pure-Vim. - Affects following motion(Unlike pure-Vim,
d
,< <
,> >
is not affected)G
,g g
,H
,M
,L
,ctrl-f
,ctrl-b
,ctrl-d
,ctrl-u
- For
d
,< <
,> >
, usestayOnXXX
option if you want to keep column.
- Default:
- Improve: Don't close search mini-editor on
blur
event. (e.g. app-switch by cmd-tab) #539 - Internal:
Base::getCount()
can take offset. - Internal Bug: Now properly detect duplicate class Name among operations.
- Internal: Rename
Misc.Scroll
toScrollWithoutChangingCursorPosition
for explicitness.
- New: Option
automaticallyEscapeInsertModeOnActivePaneItemChange
#535 - New: Option
keepColumnOnSelectTextObject
to keep original column inv i p
etc. #541, #543 - Fix: Cursor no longer become out-of-screen when move upward in
vB
#546 - Fix:
I
andA
should work on occurrence when has-occurrence #488, #518 - Fix: select-occurrence in
vL
does not correctly select occurrence(spec missed to catch) in previous release. - Improve: flash-UI feedback when
Y
invC
mode. - Improve: Cleanup and suppress flash for
r
command - Improve: As general rule selection target can override pre-composed target #531
- e.g
transform-smart-word-by-select-list
works on selection if selection was not empty.
- e.g
- Improve: Persistent-selection treated as-if real-selection further #532, #534
- Improve: Tweak what syntax scope is treated as function for TextObject.Function
- Improve:
delete-line
is now available in all mode(visual mode only for default keymap) - Improve: Now pair text-object change mode to
vC
regardless of current mode. #542- Remove internally used
TextObject::allowSubmodeChange
property
- Remove internally used
- Breaking: Remove experimental but un-used operators and text-objects.
- Operator
DeleteOccurrenceInAFunctionOrInnerParagraph
,ChangeOccurrenceInAFunctionOrInnerParagraph
,ChangeOccurrenceInAPersistentSelection
- TextObject
UnionTextObject
,AFunctionOrInnerParagraph
,ACurrentSelectionAndAPersistentSelection
,TextObjectFirstFound
- Operator
- Internal: Rename useMakerForStay to stayByMarker and no longer track marker unless needStay()
- Internal: Cleanup mutationManger #530
- Internal, Spec: New
textC
set/ensure option, validate exclusive option. #528, #533
- New: Command
equalize-panes
(ctrl-w =
) by @mattaschmann - New, Breaking:
g I
support, breaking because oldI
mapped command was renamed(harmless for most users).- Renamed because of naming-bug.
- Renamed old
insert-at-beginning-of-line
toinsert-at-first-character-of-line
(mapped toI
). - Then now
insert-at-beginning-of-line
is mapped tog I
.
- New: vim-niceblock compatible behavior #488
- Now visual-mode's
I
,A
works differently depending onvC
,vB
,vL
modes. - See
YouDontKnowVimModePlus
page on vmp's wiki for detail.
- Now visual-mode's
- New: [experimental]
search-occurrence
motion. #519- When you can see dotted-underlined-occurrence-marker,
tab
,shift-tab
can be used as motion. - You can use
space
to deselect occurrence-marker while moving next/prev ofoccurrence-marker
. - [keymap]
tab
:vim-mode-plus:search-occurrence
shift-tab
:vim-mode-plus:search-occurrence-backwards
- When you can see dotted-underlined-occurrence-marker,
- Fix: When yank into named register for input-taking-motion(e.g
" a y f )
), it fail to save to register. #520 - Improve: now
vimState.globalState
is resettable for all or specific field - Dev:
open-in-vim
now open buffer with at same cursor position. - Fix: Improve:
y i p
now move to start of paragraph after operator finished. #507 - Fix: Improve: Further compatible resulting cursor position after operator finished. #529
- Fix: Hover used to show count and register was not correctly positioned, really was bad degradation. #406
- Improve: No longer share inputUI across operation, as a result
vimState.input
become unavailable. #525. - New:
C
invC
mode change whole-line #527
- New:
project-find-from-search
command which have being provided as separate package #508.cmd-enter
is default keymap for macOS user.
- Fix: when
flashScreenOnSearchHasNoMatch
wasfalse
, throw error when search item was not found #510.
- Support: set minimum engines to
^1.13.0-beta1
. - Fix: Remove use of
::shadow
. #485 - Fix:
cmd-d
didn't startvisual-mode
suffered by the side-effect of shadowDOM removal #490 - Experimental, Improve: Better flashing effect using keyframe CSS animation
- Breaking: Removed flashing duration config params.
- Now flashingDuration is fixed to 1 sec at maximum(duration until marker be destroyed)
- User can tweak by css within this duration. Refer
styles/vim-mode-plus.less
if you want.
- Fix: Scroll motion failed to put cursor at firstChar of screen line when it’s wrapped.
- Breaking: Remove cursor line flashing effect on smoothScrolling. #502
- UI: Modify style of search match to modern(??) style.
- Fix: No longer remove non-vmp-css-class from editorElement temporarily while waiting-user-input #497.
- Fix: Flash only one instance at a given moment when search
/
,?
,#
,?
. #494 - Fix: % motion now work again #493 by @mattaschmann
- Fix When both operation and target take user input, it didn't work correctly. #491
- New: Following motion commands by @bronson.
move-to-previous-end-of-word
(g e
)move-to-previous-end-of-whole-word
(g E
)
- New: Sugar command
set-register-name-to-*
to use system-clipboard. #272 - Breaking: Rename
set-register-name-to-blackhole
toset-register-name-to-_
#478, #473, #482 - Breaking:
move-up-to-edge
andmove-down-to-edge
no longer move to first-line and last-line if it's not stoppable.- This means, eliminated special handling for first-line and last-line. Just behave same as other line. #481
- Doc: Fix typo and grammar for README.md by @jimt #483.
- Improve: Incremental-search
/ enter
and? enter
(confirm with blank imput) repeat last-search #474, #464 - New: Update backtick(
`
) and'
mark on jump-motion #476, #384- So keystroke
` `
and' '
jump back to previous position.
- So keystroke
- New: Support
'
mark. - New:
set-register-name-to-blackhole
command(no default keymap) to make blackhole-register(_
) easy-to-use #478, #473
- Fix: cursor-style-manager no longer throw error when executing
find-and-replace:select-next
in wholeline selection. #406 - Fix: No longer destroy first cursor after incremental-search is executeded with multi-cursors #461
- Fix: In visual-blockwise, unnecessary add selection in bottom direction when bottom selection start at column 0 #454
- Fix:
e
(move-to-end-of-word
) on blank row at the end of file freezes Atom #469
- New: Config option
statusBarModeStringStyle
(defaultshort
) #451 - New, Improve: Repeate(
.
) command now can repeatinsert-mode
's delete/backspace operation #322
- Improve: Improve performance for
f
,F
,t
,T
, Surround #448, #435.
- Doc: Simplify README.md
- New: Sentence motion by @bronson
move-to-next-sentence
: default keymap)
move-to-previous-sentence
: default keymap(
move-to-next-sentence-skip-blank-row
: no default keymapmove-to-previous-sentence-skip-blank-row
: no default keymap
- New: tab to space, space to tab conversion operator by @zhaocai #432, #433
convert-to-soft-tab
: no default keymapconvert-to-hard-tab
: no default keymap
- Improve: No longer actually select to display target range for
change-surround-any-pair
, so cursor position is not changed when canceled. - Breaking, Improve: Use shorter, minimum length mode indcator string on status-bar #428.
- Improve: More pure-vim-like behavior for
#
and#
. - Improve: Cleanup search motion(
/
,?
). #440. - Breaking: Remove experimental motion and operator which was intended to replacement of
f
,F
but was not such useful.SearchCurrentLine
SearchCurrentLineBackwards
InsertAtStartOfSearchCurrentLine
InsertAtEndOfSearchCurrentLine
- Fix: Don't pass empty array to
editor.setSelectedBufferRanges
, and collectly restore cursor when occurrence opeation was failed on.
repeat.
- Fix:
;
,,
throw error if orignal-find-command-executed-editor was destoyed. #434
- Improve: Fix minor inconsistency for amount of rows to scroll between normal and visual for
ctrl-f, b, d, u
. - New: Smooth scroll for
ctrl-f, b, d, u
. Disabled by default. New config option to enable and tweak animation duration. - New, Experimental: TextObject
a-edge
andinner-edge
(no diff for now), which select from up-edge to down-edge. No keymap by default.
- Breaking:
j
,k
now always works as bufferRow-wise(screenRow-wise in previous version).- Previous
j
,k
behavior is available asg k
,g j
as like pure Vim.
- Previous
- New: Operator
InsertAtStartOfInnerSmartWord
,InsertAtEndOfInnerSmartWord
no keymap by default #424 - Fix:
p
,P
mutation tracked again(was not tracked by degradation) toselect-latest-changes
#426 - Fix:
f
repeat by;
,,
clear existing selection where it should extend selection #425 - Improve:
g n
andg N
works more pure-vim-like. - Internal: Cleanup cursor position normalization required in
visual-mode
.
- Improve:
delete-surround
,change-surround
no longer trim spaces when open-pair-char and close-pair-char was same(e.g'text'
,"text"
).
- Fix, Degradation: Again guard in case mutation information was unavailable when tracking changes.
- Internal, Improve:
,
and;
is no longer instance of operator to avoid complexity. - Fix: Throwing error in
V D
keystroke. #416, #417.
- Fix: Guard in case mutation information was unavailable when tracking changes.
- Improve: Clear multiple-selection when
create-persistent-selection
#414 - Keymap: Remove
cmd-d
inhas-persistent-selection
scope to work well with defaultcmd-d
#413 - Keymap: Add
[
,]
tovim-mode-plus:move-up-to-edge
,vim-mode-plus:move-down-to-edge
#412
- New:
preset-occurrence
#395, #396- Allow user to set occurrence BEFORE operator.
- Keymap: In
normal
,visual
,g o
totoggle-preset-occurrence
.- It add/remove
preset-occurrence
at cursor position. - When removing, it remove one by one, not all.
- It add/remove
- Keymap: In incsearch input,
cmd-o
toadd-occurrence-pattern-from-search
- It add
preset-occurrence
by search-pattern.
- It add
- Following two operation do the same thing, but former is
operator-modifier
, later ispreset-occurrence
(g o
).c o $
: change cursor-word till end-of-line.g o c $
: change cursor-word till end-of-line.
- New: PersistentSelection: (former RangeMarker)
- Allow user to set target BEFORE operator.
- Used as implicit target of operator. As like selection in
visual-mode
is used as implicit target. - Config:
autoSelectPersistentSelectionOnOperate
(default=true) control to disable implicit targeting. - Updated style to seem like selection.
- Keymap: In
visual
,enter
tocreate-persistent-selection
. - If you map
c s
tochange-surround
, I recommend you to disable it including other keymap starting withc
. - Following two operation do the same thing, but former target is normal selection, later target is
persistent-selection
.V j j c
: change two three line.V j j enter c
: change three line.
- Common use case is
- Work on multiple target without using mouse: set multiple target by
persistent-selection
then mutate. - Narrow target range to include particular set of
occurrence
.
- Work on multiple target without using mouse: set multiple target by
- New: Highlight occurrence when occurrence modifier(
o
) is typed. #377 - API Breaking, Improve: globalState is no longer simple object, use
get
,set
method instead. Now observable it's change. - Breaking, Improve: When
H
, andL
motion is used as target of operator, ignore scrolloff to mutate till visible-top or bottom row. - Breaking:
clearMultipleCursorsOnEscapeInsertMode
is now defaultfalse
, this was changed in v0.57.0, but now reverted. #376 - Fix: PreviousSelection(
g v
) was incorrectly shared across editor. - Fix: No longer use
@syntax-result-marker-color
instead use@syntax-text-color
. - Improve: Gradual clearing different kind of marker(persistent-selection, occur, hlsearch).
- Improve, Fix:
stayOnDelete
is now work properly on every situation. - Improve: Use marker to track original cursor position to stay. #380
- Improve: When
stayOnOperate
family feature are enabled, adjust cursor position to not exceeds end of mutation #380 - Improve: Crean up OperationStack. #400
- Improve: Many TextObject now follow new convention(return range of text-object by
getRange()
). - Improve:
word
text-object family to select more vim-like range(don't select adjoining non-word-char like Atom's defaultselection.selectWord()
). - Internal: Debug codes and cleanup
- Internal:
OperationStack::subscribe
now return subscribed handler. - Internal: Split out highlightSearch concerning code as HighlightSearchManager class #398
- Internal: Split out mutation concerning code in operator as MutationTracker class
- Internal: Split out rangeMaker concerning code as PersistentSelectionManager class
- New: VisibleArea text-object. keymap
i v
. - New:
UnionTextObject
andAFunctionOrInnerPair
- Rename: Operator
replace
toreplace-and-move-right
andreplace
is general replace operator.
- Fix:
a-word
anda-whole-word
now select leading white-space when trailing space was not exist #355 - Fix: Paste(
p
) non-linewise text to empty line now insert text to same line, not next-line like previous version. #359. - New: When
o
modifier is used inoperator-pending-mode
,with-occurrence
css scope is set to provide keymap scope. - New: Now
Operator Pending
status is shown on status-bar. - Internal, Improve:
Operator.coffee
is split out into three files and overhauled greatly #370. - New: Stay preference support for
Delete
, andStayOnDelete
config options control this behavior. - Breaking: Removed
SetCursorsToStartOfTarget
,SetCursorsToStartOfRangeMarker
since not used. - Improve:
.
repeat is no longer dependRepeat
wrapper operation. Simply replayed recorded operation by operationStack. - Breaking, New:
clearMultipleCursorsOnEscapeInsertMode
config option withtrue
by default. - Breaking, Experimental, New: Default keymap only available in
o
modifier is specified. #379- To change occur in
inner-paragraph
: Can typec o p
, instead ofc o i p
- To change occur in
a-function
: Can typec o f
, instead ofc o a f
- To change occur in
a-range-marker
: Can typec o r
, instead ofc o a r
- To change occur in
inner-current-line
: Can typec o l
, instead ofc o i l
- To change occur in
a-fold
: Can typec o z
, instead ofc o a z
- Off course: you can do with operator other than
c
. e.g.d o f
,g U o z
.
- To change occur in
- Breaking, Degradation, Improve: To fix stale selection properties, I disabled special support for outer-vmp command which create selection.
- When outer-vmp command create selection and enter
visual-mode
, original cursor position is no longer preserved. e.g.cmd-l
.
- When outer-vmp command create selection and enter
- New: Operator
insert-at-start-of-occurrence
,insert-at-end-of-occurrence
to start insert at occurrence. - New: Operator
sort
#365 - New: Motion
search-current-line
,search-current-line-backwards
#366 - Fix:
f
,F
,t
,T
was broken, no longer focus input on repeat by;
or,
#367
- Internal: Avoid circular referencing for string transformers store.
- Doc: Update doc-string of many operator for better command report for vmp wiki.
- Breaking, Improve:
AddSelection
no longer get word from visual-mode #351 - New:
All
TextObject as alias ofEntire
. #352 - Improve?, Breaking?: Change range-marker style as-if selection #357
- Improve, Rename: Cleanup operator-modifier mechanism. Renamed command #357
v
:force-operator-characterwise
tooperator-modifier-characterwise
V
:force-operator-linewise
tooperator-modifier-linewise
- New: Occurrence operator-modifier #357
o
inoperator-pending-mode
- As like
v
orV
modifier force the wise of operator. o
modifier re-select cursor-word from target range.- e.g.
g U o i p
upper case all occurrence of cursor-word in paragraph - e.g.
c i p
change whole paragraph,c o i p
change occurrence of cursor word in paragraph.
- e.g.
- This modifier is available for all operator.
select-occurrence
,map-surround
is created based on thisoccurrence
modifier.
- New: Narrowed selection state #357
is-narrow
state is automatically activated/deactivated whenvisual-mode
and last selection is multi-line.- Available shortcut in
visual-mode.is-narrow
scope.ctrl-cmd-c
:change-occurrence
to change occurrence of cursor word in selection.cmd-d
:select-occurrence
to select occurrence of cursor word in selection.
- New: RangeMarker new command.
toggle-range-marker
: remove or add range-markertoggle-range-marker-on-inner-word
:inner-word
pre-targeted versionconvert-range-marker-to-selection
: add selection on all range-marker and remove range-marker after select.
- New: IncrementalSearch specific
/
,?
special feature #357- Direct command from search-input mini editor.
ctrl-cmd-c
:change-occurrence-from-search
to change occurrence of search pattern matched.cmd-d
:select-occurrence-from-search
to select occurrence of search pattern matched.- When above command is applied operator target is automatically set in following priority.
- In
visual-mode
use current selection as target. - If there is
range-marker
then use it as target. - None of above match, then enter operator-pending state to get target from user.
- In
- Direct command from search-input mini editor.
- Rename:
add-selection
toselect-occurrence
- Improve:
reset-normal-mode
clear hlsearch and range-marker more thoughtfully. No longer clear in following situation.- Internal invocation of
vimState.resetNormalMode()
. - When having multiple cursor.
- Internal invocation of
- Internal: Define
Base::initialize
to be eliminate uncertainty of super call in child class. #361
- Breaking: Revert change introduced in 0.54.0(Was not good). insert-mode escape return to normal-mode regardless os autocomplet popup #339.
- Improve, Breaking: When autocomplete's popup is active,
escape
ininsert-mode
no longer escape insert-mode. #339 - New:
TrimString
operator 'g |' for default keymap. #341 - Improve, Breaking: #342
TransformStringBySelectList
no longer ask target first. Instead ask target last as in normal operator. - Internal: Let each operator register itself to select-list
- New, Experimental:
incrementalSearchVisitDirection
config option #343- Default
absolute
, ifrelative
,visit-next
(tab) follows to search direction(/
or?
).
- Default
- Improve: Now user can invoke
add-selection
fromvisual
mode #340. - New: Add default keymap
g cmd-d
tovim-mode-plus:add-selection
. - Improve, Breaking: Rename
RangeMarker
family operator, text-object to fix naming inconsistency. #346- Operator:
MarkRange
toCreateRangeMarker
- TextObject:
MarkedRange
toRangeMarker
- Operator:
- Fix: In case vimState is not available(not sure why), cancel execution of operation. #347
- New: Add keymap to make
I
andA
is available in all visual submode(was available invisual-block
only in previous version) #348
- Fix: Command is dispatched to different(incorrect) editor instead of editor which fired original event. #338
- Doc: Update links in README.md
- Improve: Suppress error when motion is pushed to operation stack when previous motion had not finished. #327
- Internal: Consolidate vmp specific error class. Avoid inappropriate class inheritance.
- Improve: Prevent unnecessary propagation of event for all vmp commands.
- Doc: Add ISSUE_TEMPLATE.md.
- New:
Y
in visual-mode yank whole line #330. - Improve, Breaking:
Surround
andChangeSurround
trim() white spaces of inner text before surround #331. by @ypresto - Improve:
ctrl-f
no longer put cursor to EOF instead of vimEOF. - Improve: Accuracy improved for the position where hover shows up, so
ChangeSurroundAnyPair
shows hover on original cursor position. - Improve: Notification warning when user enabled both vim-mode and vim-mode-plus #335.
- New:
groupChangesWhenLeavingInsertMode
setting to control whether bundle changes or not when leaving insert-mode #323. When disabled, changes are not bundled and user can undo more granular level(smaller steps). Default istrue
(same as pure Vim). - Mention
paner
in helper packages section of README.md since revived!
- Fix: Deprecation warning introduced by new editor.displayLayer #319.
- Support: set minimum engines to 1.9.0 above.
- Fix: Invoking text-object command directly from insert-mode cause uncaught exception #318.
- Improve, Breaking: #314 Allow
move-up-to-edge
andmove-down-to-edge
stops at first or last row even if it char was blank.
- Improve: New command
vim-mode-plus:force-operator-characterwise
,vim-mode-plus:force-operator-linewise
to change original wise(linewise/charactewise) and toggle exclusiveness #313
- Fix: TextObject a-paragraph did not select trailing blank rows for one-line non-blank paragraph #309
- Breaking: Simplify TextObject comment. now
a /
andi /
works identically #311
- cosmetic change, my preference about parenthesis has changed.
- Improve: reversing selection by
o
in visual-mode make reversed state sync to lastSelection in multi-selection situation. - Fix:
ctrl-f
,ctrl-b
,ctrl-d
,ctrl-u
. Just follow the way of vim-mode's fix. It was better than vmp's. - Doc: Make "disable vim-mode first" instruction standout since not small amount of user reporting issue by enabling both!
- Fix;
.
repeat collectedly replay vB range. #261 - New: Support
activate-normal-mode-once command
#281 suggested by @wangxiexe
- Fix:
ctrl-y
,ctrl-e
, throw error, and not worked properly, latent bug of vmp become obvious from Atom 1.9.0-beta0 - Improve: Now
3d2w
delete 6(3x2) words instead of 32 words in previous version. #289
- New: Improve % motion, support HTML Tag, and AngleBracket #285
- Fix:
Uncaught TypeError: history.getChangesSinceCheckpoint is not a function
#288
- Fix: Don't throw error when
vr
in empty buffer by avoiding odd state(=visual-mode but selection is empty) #282 - Improve: Refactoring
- New: Operator.PascalCase by @raroman, default keymap is
gC
. pascase-case works likepascal-case to PascalCase
. - Improve:
D
in visual-mode should delete whole line #284
- Change Default:
setCursorToStartOfChangeOnUndoRedo
is now enabled by default. - Change Default:
flashOnUndoRedo
is now enabled by default. - Cleanup: Remove
pollyFillsToTextBufferHistory
since supported engine is already>=1.7.0
. - Cleanup: Remove workaround for AutoIndent of single "\n" since v1.7.2 Atom-core includes this fix. #231
- New: CompactSpaces operator(
g space
by default). To compacts multiple space to single space, not touch leading, trailing spaces #279.
- New: Add service
observeVimStates
,onDidAddVimState
andvimState::onDidSetMark
#276
- Breaking: Rename
split-character
tosplit-by-character
. - Fix:
ctrl-y
,ctrl-e
. Just follow original vim-mode fix. #275
- Improve: Test spec now support more concise keystroke syntax and all spec rewritten to use new keystroke #270
- New: add experimental
startInInsertModeScopes
configuration to selectively start ininsert-mode
for specified scopes.
- Improve: Now selectAllInRangeMarker can pick word from visual selection.
- Improve: selectAllInRangeMarker can switch regex's word boundary option \b based if in visual-mode.
- New: Motion YankToLastCharacterOfLine for user who don't like default
Y
include newline #265. - New: New setting option to suppress highlightSearch for certain scopes
- Improve: No longer use custom marker property since it's deprecated in v1.9.0 #242
- Improve: Use display-layer methods #242
- Improve: Use clipDirection instead of clip for screenPosition clipping #242
- Fix:
w
now can move to next line in CRLF file #267
- Improve: #259
*
,#
now pick search word under cursor in the same manner where selection.selectWord() pick word. - Breaking: #259 Remove hidden
vim-mode-plus.iskeyword
configuration option. - Fix: Make
MoveToMark
executable from command-pallate #252, #254. - Improve: highlightSearch no longer extend highlight marker even when character inserted at intersecting tail.
- Improve: #262 Now
maximize-pane
can maximize none-editor paneItem such as setting-view, markdown-preview. - Breaking: #262
maximize-pane
is mapped fromctrl-w z
(for all) andcmd-enter
(for mac) by default. - New: #262 New config
hideTabBarOnMaximizePane
(enabled by default). Disabling it keep tab-bar when maximized. - Fix: #258
f
command occasionally throw error, so I simply revert to former code which use panel to attach hidden mini-editor.
- Fix: #258
f
,F
fail after paneItem change then back to original paneItem.
- Fix: #252, #254 No longer use input mini editor for single char input for mark
- Internal: make command event accessible via vimState while running command
- Improve: If hide option is set on Input::focus() it don't add Panel
- Fix: #253 fix
r
in vB
- Internal: Eliminate view/model separation for Hover and HoverElement.
- New:
SearchMatchForward
(gn
),SearchMatchBackward
(gN
) text-object. #241 - Fix: Don't clear maximized state when active item changed in same pane #244
- New: AddSelection operator #245
- Dev: add
npm run watch
- New: Preserve
<
,>
mark for visual start and end. - New: PreviousSelection text-object vB still not supported #246
- New: MarkRange operator and MarkedRange text-object #249
- New: Config option to clear HighlightSearch and RangeMarker on
escape
in normal-mode. #250 - Improve: Support
InsertAtStartOfSelection
from vC mode, no longer need to enter vB only for insert at start of selection. - Breaking: MoveTo(Previous/Next)FoldStart no longer linewise motion.
- New: General insertion operator
MotionByTarget
- New Experimental new Operator
SetCursorsToStartOfTarget
and MarkedRange precomposed version. - Internal: Do editorElement className update manually.
- Fix: Ignore
mouseup
event handling oninsert
mode #240
- Internal: Gradually making motion into pure point calculator #225
- Improve: Operate on same range on
.
repeat even ifstayOnTransformString
was enabled #235 - New: MoveToColumn motion. Default keymap is
|
. #230 - Improve:
dblclick
correctly activate visual mode, simplify mouse event observer. #228 - Improve: Better integration with Atom's native commands(e.g
cmd-l
) #239
- Fix:
gg
,GG
throw error when destination row was blank line. #233 - Fix: Critical bug TextBuffer.history pollyfilled multiple times because of incorrect guard #229
- Support: set minimum engines to 1.7.0 above.
- Internal: Cleanup blockwise-selection.
- Internal: Now modeManager::activate take only true mode(no longer handle
reset
,previous
as former version). - Breaking: Rename
activate-previous-visual-mode
toselect-previous-selection
- Experiment: Trying to not depend on atom's Selection::selectWord. #225
- Experiment: Trying being independent from atom's imperative cursor motion. #225
- Breaking: #224 remove Move(Up|Down)ToNonBlank
- Fix: Don't move cursor up when inserting single white space at column 0 #226
- Fix: To support Atom v1.7.0, polyfill for TextBuffer::history.getChangesSinceCheckPoint #229
- Fix:
cc
,S
ignore auto indent on Atom v1.7.0 #231
- Fix: Uncaught error on
y
,gU
etc.. invB
whenstayOnYank
,stayOnOperator
enabled #221.
- Improve: Further coverage of
gv
support. Not yet complete but much better. - Improve: Respect
stayOnYank
,stanOnOperate
onvisual-mode
#221 - Fix:
TransformStringByExternalCommand
throw error onOperationStack::finish
because of incorrect argument. - Fix: Correctly unfocus input mini editor when
SurroundAnyPair
can't find(detect) pair chars.. - Internal: Update charactewrise selection properties in
visual-mode
selection modification by Motion, TextObject. - Improve: Don't flash in
visual-mode
even ifflashOnOperate
have enabled.
- Fix: Guard for calling
refreshHighlightSearch
against destroyed editor #196 - Internal: Quit model, view separation for
Input
andSearchInput
- Rename:
misc-commands.coffee
tomisc-command.coffee
- Internal: move
scroll.coffee
code tomisc-command.coffee
- New: add
SmartWord
based motions(MoveToNextSmartWord
,MoveToPreviousSmartWord
,MoveToEndOfSmartWord
) - Fix:
goalColumn
incorrectly reset onvL
mode. #220 - Improve: keep
goalColumn
invL
tovC
,vC
ton
.
- Fix: No longer necessary to set
editor.useShadowDOM
enabled to use vmp #218 - New: [Experimental] Set
yank-pending
,delete-pending
scope for granular keymap setting #215.
- Improve: cleanup
operation-stack.coffee
- Internal: New convention. use
Operator::mutateSelection
- Improve: Reduce complexity for MoveToNextWord #200
- Internal: improve Base::countTimes pass isLast as 2nd arg
- Fix: For
$
motion with count now correctly move to end of line of Nth line blow. - Improve: Now support all motion in
visual-blockwise
#213 - Internal: Remove many visual-blockwise special code #213
- Internal: Each command class can answer its description.
- Internal: Generate summary table for all commands.
- Internal: Remove VisualBlockwise class #210.
- Improve:
c
on visual-blockwise now keep multi-cursors. - Fix: null guard in case Patch is not yet available for >=Atom v1.7.0-beta0
- Internal: Refactoring many parts(Search, MatchList, ModeManager, OperationStack) #200
- Improve: Support upcoming Atom 1.7+ text-buffer change #206, #203
- New: New Motion for alphaNumeric word family #207
- MoveToNextAlphanumericWord for
w
- MoveToPreviousAlphanumericWord for
b
- MoveToEndOfAlphanumericWord for
e
- MoveToNextAlphanumericWord for
- Fix: Tweak L(MoveToBottomOfScreen) motion don't cause scroll.
- Internal: Reuse Select, CurrentSelection instance, hope improve #162
- Internal: Introduce Sugar methods on Base.prototype for instanceof check
- Fix:
n
,N
in different editor causeflashScreen
is not function.
- Breaking: Remove scroll among search matched feature #201
- Breaking: Literal input mode in Search input field is now achieved by standard selector-specific keymap.
User who used this feature in older version need to update keymap selector to
atom-text-editor.vim-mode-plus-search:not(.literal-mode)
. See example in wiki/Keymap-example - Internal: cleanup
Search
,SearchCurrentWord
. - Fix: Use new pane split feature from Atom v1.6.0 #204
- Support: set minimum engines to 1.6.0 above #204
- Breaking: Remove semi-broken
disableInputMethodExceptInsertMode
setting #205 - Fix:
o
afterVjj
thencmd-shift-d
display cursor incorrect position(cosmetic). #202
- Improve: #192 Keep original visible area as much as possible when scrolling by
n
,N
,/
,?
to avoid mental context switching - New: delete/change-any-pair-allow-forwarding. More powerful version of existing
change-surround-any-pair
anddelete-surround-any-pair
#194 - Improve: #195 keep code layout when
surround
,delete-surround
,change-surround
. former implementation mechanicallytrim()
white space of inner string.
- Fix: Inconsistency for changed area for
P
,p
. And respect original newline on EOF. - New:
PutAfterAndSelect
andPutBeforeAndSelect
to paste and select #184 - New: allow-forwarding text-object #188
- Spec: Improve test coverage for
%
motion - Improve: Fix several minor bug for
%
motion. - Improve: Fix several minor bug for pair text-object.
- Fix: Now
c
can enter insert mode even if target is empty. #189 - Fix: Don't treat double backslash \ as escape char in TextObject.Pair family #191
- New:
innerTag
andaTag
text object. #84
- Fix: setHover error. Guard when
vimState::getBlockwiseSelections()
is empty. - Fix:
ctrl-v
thenj
throws error "Cannot read property 'getHead' of undefined" #179 - New:
SwapWithRegister
operator to complementv_p
andv_P
in pure Vim #180. keymap is disabled by default. - Internal: Greatly simplify cursor offset calculation by using
Point::traveralFrom()
- Fix: visual-blockwise
j
,k
always work bufferRow-wise and never past BOL and EOL #10. - New: new config options
ignoreCaseForSearch
,ignoreCaseForSearchCurrentWord
,useSmartcaseForSearchCurrentWord
#181
- Fix: Quick fix for degradation for issue cursorDOM node is not exits #178
- New: Add space when surround if input char is in
charactersToAddSpaceOnSurround
. #171 - Improve: Cancel search when tab was switched in the middle of searching.
- Internal: cmd keystroke support for spec helper
- Improve: Warn user when useShadowDOM disabled #177
- Fix: Prevent ReplaceModeBackspace is invoked except from replace-mode #175
- Fix: subscription leak for highlightSearch #158
- Improve: blockwiseSelection,
getHeight()
,setSelectedBufferRanges()
. - New:
vimState.getBlockwiseSelections()
- Fix: Hover place was incorrect when visual-blockwise and its selection is reversed.
- Internal: Avoid mode change within visual-blockwise and remove dirty
operation.isProcessing()
guard inmodeManager::restoreCharacterwise()
- Fix:
MoveToFirstCharacterOfLineDown
andUp
shold work as buffer-positoin-wise. #166
- Fix: #161
gv
not re-select last selection after Yank in visual-mode. - Fix: #163 occasional
Uncaught TypeError: event.target.getModel is not a function
when executing vmp commands.
- Internal: cleanup blockwiseSelection.
- Fix: #158 When highlight cleared, it should not highlighted again on refreshing event(scroll, switch pane).
- Fix: #158 Maker default flash color transparent(fadeout 50%) to not hide overlapping text when text color is same as flash color.
- Fix: Bump up engines version to atom 1.4.0 above.
- Fix: In visual-linewise, position of hover indicator was incorrect.
- New: highlight last search pattern across all buffer. #158
highlightSearch
config parameter to enable/disable.vim-mode-plus:toggle-highlight-search
: to togglehighlightSearch
config value.vim-mode-plus:clear-highlight-search
: one-time clearing for highlightSearch. equivalent to:nohlsearch
in pure Vim.
- Fix: Guard for case when editorElement.component is not available #98
- Fix: Search flash no longer flash multiple word simultaneously. #153
- Fix:
flashOnSearch
configuration parameter was not checked on flash. - @crshd - Fix:
dw
,dW
don't go beyond EOL on last movement in single transaction. #150 - Fix: Respect and observe
editor.lineHeight
and refresh cursorStyle on change #154. - @crshd, @t9md - Internal: New dev-mode command
toggle-reload-packages-on-save
to reload vmp on buffer save. - Internal: New dev-mode command
reload-packages
to reload vmp and vmp plugins - Internal: Making vmp package hot reload-able to make development easier.
- New: Provide css id for status-bar container so that user can hide status information completely #152
- New: New options to disable Input Method(IME) except insert-mode #148.
- Improve: Full-support for multiple blockwise selections, each blockwise selections are kept in vimState.blockwiseSelections.
- Internal: Allow Operation specific command scope #147.
- Internal: New
swrawp::switchToLinewise()
util to switch selection temporarily. - Internal: Now
countTime()
is Base methods. - Internal: Remove
toggleClassByCondition()
utils. Instead, use nativeclassList.toggle()
. - Internal:
swrap::translate()
function arguments was inconsistent with wrappingRange::translate()
function.
- Breaking: Remove
move-line-up
,move-line-down
, it is externalized asmove-selected-text
plugin package #145. - New:
Operator::execute()
now can do asynchronous operation(can return instance of Promise). #146. - Internal: Consolidate
counter-manager.coffe
into vimState. - Improve: Several refactoring. spec-helper keystroke now support
waitsForFinish
to wait operationFinish for asynchronous operation.
- Bug:
TransformStringBySelectList
fail because of un-registeredSortNumerical
member left by development.
- Internal: Fix naming inconsistency
- New: Provide
getCommand
,getStdin
,getStdout
as hook forTranformStringByExternalCommand
- Improve: Error handling for
TranformStringByExternalCommand
. - New:
TransformString::getNewText
pass selection as 2nd args. - New: #143, suspend/unsuspend execution of operation to make async method involved operation repeatable.
- New: TranformStringByExternalCommand #140
- Doc: Update old wiki link in Readme
- Improve: Use more accessible displayName for
TransformStringBySelectList
- Internal: No longer use short variable name like
c
for cursor,s
for selection . - Internal: Refactoring. extract restorePoint logic from Operator::eachSelection method.
- Internal: Provide wrapper function
Base.processOperation()
,Base.cancelOperation()
to controll operationStack. - New: #142 Support per selection clipboard for
Change
,Delete
,Yank
operation. - Fix: #141, For
Change
operation, if target is TextObject, it auto-detect target's wise(linewise, characterwise)
- New: InsertByMotion can insert after move, and repeatable.
- New: Support insert count e.g
10iabc
,10oabc
. - Spec: #137 dot register, insertion count, insert-last-inserted
- New: TextObject.SmartWord which is just include dash(-) char into
\w
- New: SurroundSmartWord is pre-targeting InnerSmartWord
- New: Operator EncodeUriComponent, DecodeUriComponent
- New: Operator TitleCase
- New: #139 support SelectList UI
- New: #138, #139 Operator TransformStringBySelectList transform string by choice
- Fix: Don't change submode from
characterwise
tolinewise
automatically #131. - Internal: new
TextObject::allowSubmodeChange
property control automatic submode shift from selected range. - New: Fix: As part of fix from Atom v1.4.0 change, Paragraph motion was completely rewritten, now more compatible behavior to pure Vim.
- New: Configuration parameter
flashOnOperateBlacklist
allow disable flash for specific operation. - Improve: Now
move-to-blank
,move-to-edge
works correctly for hardTab language buffer like golang.
- Improve, New: TextObjet.Fold can expand when repeated!
- Improve: Spec for TextObject.Fold, Motion.MoveUpToEdge
- New:
insert-at-previous-fold-start
,insert-at-next-fold-start
- New:
move-to-position-by-scope
as parent class of every scope based motion. - New:
move-to-next-string
,move-to-previous-string
- New:
move-to-next-number
,move-to-previous-number
- Internal: Reporting command in dev-mode which report commands which have no default keymap.
- FIX: Disable strict check of non-empty selection in normal-mode at the timing of operation finished. #123.
- Fix:
I
doesn't go to first char if already there. #122.
- New: Misc.Maximize-pane command from my
paner
package. - Fix: Selecting big text object(its range is not fit in one screen) lost cursor marker #109.
- Breaking: BracketMatchingMotion is completely rewritten and renamed to MoveToPair(move-to-pair).
- Internal: TextObject Pair improved(pre-split pairChars, provide more granular range info) #113.
- Improve: Improve error message in OperationStack throw error related to #114.
- Improve: TextObject.Pair don't select first line when its text is opening pair char only #111.
- Internal: New convention all TextObject must implement selectTextObject function.
- New: Move(Up|Down)ToEdge to moveUP/Down only edge row.
- New: MoveTo(Previous|Next)FoldStartWithSameIndent. to skip different indentation row.
- Internal: commands for speedup development.
- FIX:
e
,E
should skip blank line #117. - FIX:
w
,W
moved to endOfWord instead of beginningOfWord when cursor is trailing white space. - FIX:
dk
not delete blank line if cursor is at blank row #118. - FIX:
j
,k
in visual-linewise should not expand folds, but was expanded #120. - Internal: Refactor
Motion::selectInclusive()
now almost finished! - New: Base.commandPrefix class variable is used as command name prefix(for user's custom command use).
- New: Operator.Reverse to reverse selected lines.
- New: Motion move-(up|down)-to-non-blank to move up/down by skipping blank characters #101.
- New: Motion move-to-(previous|next)-fold-(start|end) to move around code folds #102
- FIX: TextObject Paragraph and its child class get called getRange with negative row number fix #99
- FIX: When last line have no newline("\n") char, cursor marker shown at incorrect place #100
- FIX: Select operator should not be repeatable, but was repeatable(that cause unexpected error).
- FIX: When
r
(replace operator) in visual-blockwise mode causeSelection is not empty in normal-mode
error #104 - Internal: move ModeManager::replaceModeBackspace to Misc commands
- Internal: Service API no longer expose vim-mode-plus's subscriptions
- Internal: New
Base.reset()
class method to reload all commands to speed up development process.
- Internal: cleanup cursor movement in
Motion::selectInclusive()
#87 - Internal: remove flashManager class. move flashManager feature to utils.coffee.
- Internal: spec-helper mini DSL now can check characterwiseHead in
V
scenario. #90 - FIX: Stacktrace is not displayed for OperationStackError.
- FIX: When shift from visual-blockwise to other modes, cursor marker get odd. #71
- Breaking: remove
vim-mode-plus:set-count
, and provide distinctvim-mode-plus:set-count-1
and alike #63 - Improve: Accuracy improved for cursor movement in visual-linewise for
*
,#
,/
,?
commands. #91 - FIX: TextObject CurrentLine should work on bufferRow instead of screenRow #95
- FIX: goalColumn is not respected in visual-line
j
,k
on soft-wrapped line #96 - FIX: visual-linewise cursor marker is incorrect in soft-wrapped line. #97
- Internal: visual mode's cursor display functions are separated from vimState into cursorStyleManager #97
- FIX: #86 Repeating text-object targeted operation(e.g.
ciw
then.
) incorrectly activate characterwise visual-mode. - FIX: Work around issue #85 issue vim-mode-plus with term2 package.
- NEW: support characterwise movement in visual-linewise mode #74, #83.
- FIX: When buffer is soft-wrapped and in visual-characterwise mode, moving selection put cursor on incorrect position #81
- FIX:
wrapLeftRightMotion
parameter is not respected in visual-mode and soft-wrapped buffer's normal-mode. #82
- FIX: Critical degradation, when selection whole buffer with
cmd-a
, exception thrown.
- Breaking: Surround take target before reading surround-char #75
- ex-1:
ys
mapped tovim-mode-plus:surround
- old:
ys(iw
- new:
ysiw(
- old:
- ex-2:
ms
mapped tovim-mode-plus:map-surround
- old:
ms(ip
- new:
msip(
- old:
- ex-1:
- Breaking: Remove default keymap of surround like
gss
,gsw
,gsd
,gsc
. - FIX:
gg
andG
should go to buffer line instead of screen line. - FIX: SelectLatestChange didn't correctly restore visual submode.
- FIX: Increment, Decrement didn't clear selection on finished.
- FIX:
v
,escape
on empty-line put cursor one-line down in corner case #70 - FIX: degradation,
G
should use bufferRow than screenRow. - Improve:
a
check cursor.isAtEndOfLine() for each cursor in multi-cursor. - Improve: When Surround target is linewise area, it insert line break char #78.
- Internal: Cleanup selection, cursor adjustment for consistent moveCursor behavior in both normal and visual mode #73.
- Internal: Remove debug feature for OperationStack #72
- Internal: Now throw error when selection is not empty in normal-mode at operation finished to strictly catch unexpected operation result.
- Internal:
dd
,yy
,gUgU
like sequential operation support now done in OperationStack. - Improve: Visual characterwise mode keep tailRange correctly when selection is indentation white spaces char. #79
- Internal: Separate big spec files into small topic based spec file.
- Further accuracy improve for cursor not past last newline #56.
- BUG: V, escape on empty-line put cursor one-line down than expected row #70
- Improve: Tweak default add/change color of undo/redo operation.
- FIX: Cursor visibility in
cmd-d
operation. #55 - FIX: Cursor visibility in visual-line mode on last line of buffer.
- FIX: Change operator wasn't atomic(not in one transaction) in multi-cursor #57.
- FIX: SurroundWord operator eat extra whitespace. #58
- New: MapSurround operator to apply surround operation to each word in targeted area.
- New: ToggleFold misc command to toggle fold at cursor row. Default keymap is
za
- FIX: F/T should be exclusive(exclude char under cursor) when used as operator's target but was inclusive. #62
- FIX: Add keymap
down
,up
in visual-block-mode #64 - Internal: Revival of once removed atom.commands.onDidDispatch observation to track selection change.
- Improve: Accuracy improve for behavior when setCursorToStartOfChangeOnUndoRedo is enabled.
- New: LatestChange text-object. Which area is defined between
[
and]
marker. - Breaking: Rename
vim-mode-plus:split
tovim-mode-plus:split-string
to avoid confusion. - Don't allow cursor past last newline by vim-mode-plus's operation #56.
- New: provideVimModePlus service API now provide Base class and subscriptions.
- Internal: Remove dynamic derivation for (a, inner) TextObject for consistency.
- Doc: Most of sections are moved to vim-mode-plus Wiki and remove old documents.
- Improve: Change operator properly update change marker(
[
,]
) - Internal: Refine definition for what
isComplete()
is. - New experiment: Split operator to split selected line by string entered.
- New experiment: Performance effective(in big buffer) version of move-line-up/down operator.
- Internal: Remove direct referencing to settings parameter in hover instance.
- Improve: hover can show input char even in oneChar input operator like Surround.
- Improve: hover sync text when multi-char input text is deleted for operator like ChangeSurround. #42
- New improve: [Experimental] Show cursor position in visual-linewise. #45
- Improve: Change won't enter insert-mode if target object is not found like in case
ci(
failed. - Improve: All Pair text-object properly select text-object in case char under cursor is closing pair. #48
- FIX: Prevent vim-mode-plus's command become available in mini-editor. #50
- FIX:
p
,P
insert extra newline when line ending is CRLF #49. - FIX:
dd
,dk
remove extra line when its executed last line of buffer. #43
- Improve cursor position on Undo/Redo when setCursorToStartOfChangeOnUndoRedo is enabled.
- FIX: hover didn't cleared when
;
was repeated without previous find. - Improve: Flasher.flash do simply flash removed callback args for simplicity.
- New: Introduce onDidSelect, onWillSelect, onDidOperationFinish internal event system.
- Improve: Now most of operation is child of TransformString class
- Breaking: deprecated parameter 'stayOnIndent', 'stayOnReplaceWithRegister', merged to 'stayOnTransformString'
- New: Introduce
g J
join-with-keeping-space commands - New: Introduce JoinByInput, JoinByInputWithKeepingSpace(default no keymap) [experimental]
- New: Option to put cursor start of change on Undo/Redo
- New: Option to flash on Undo/Redo(green: addded, red: removed) by option flashOnUndoRedo
- New: Support mark
[
,]
which is updated on yank and change. - New: select-latest-change command select range from mark
[
,]
) command(no keymap by default) - New: track change when insert-mode repeated.
- FIX: Paste fail when flashOnOperate was disabled. #38
- FIX: incorrect cursor position when escaped from visual-linewise
- Improve: operator.coffee is now more readable by power of @eachSelection abstracts final cursor position handling.
- New: stayOnReplaceWithRegister, stayOnYank, stayOnIndent to stay same cursor position after operation finished.
- Improve: InsertLastInserted is now accurate by refactoring ActivateInsertMode and its descendants.
- FIX: spec bug, revealed by validating spec-helper's mini-DSL options.
- Improve: Lots of test spec refactored.
- Improve: Refactoring TransactionBundler used in ActivateInsertMode.
- New: [Experimental] introduce increment/decrement operation
g ctrl-a
,g ctrl-x
. - FIX: incremental-search throw error: findFoldMarkers need explicit filter query object from Atom 1.3.0.
- New: [Experimental] new InsertLastInserted in insert-mode(ctrl-a in pure Vim).
- New: keymap
ctrl-h
in replace-mode.
- Add spec for visual-blockwise to visual-characterwise shift
- New:
^
mark which store last insert-mode position. - New:
gi
to start insert-mode from last-insert position(^
mark). - New: when count is specified
with-count
selecter is set on editorElement - New: when register is specified
with-register
selecter is set on editorElement - New:
N%
motion N is count. In 100L buffer,50%
move cursor to 50L. - New:
gv
support all sumbmode(characterwise, linewise, blockwise). - New:
increase
,decrease
support in visual-mode which greatly extends usage of these commands. - Tweak: don't clear multi-selection when from char-2-block if only selection is single line, this allow
cmd-d
,ctrl-v
,I
(orA
) work.
- FIX: #31 RepeatSearch(
n
) commands repeat last search regardless success or not. - No longer add commands per editorElement, commands are added on activate phase once.
- Now each operations(TextObject, Motion, Operator etc) can registerCommands().
- Base.init() do all necessary initialization.
- Improve BlockwiseSelect when softwrapped.
- Add spec for visual-blockwise mode.
- Cleanup: globalState no longer instance of class, and nor property of vimState, since its global. It should be treated as like settings.
- New: #24 now folds kept closed when selection go over folded area. l, h expand folds as like Vim.
- Recorded operation history is no longer extended infinitely, just keeping one lastRecordedOperation is enough.
- Remove old meaningless(anymore) pushSearchHistory, getSearchHistoryItem on vimState.
- Move misc commands(like vimState::reverseSelection) to separate misc-commands.coffee so now processed by operationStack good for consistency.
- Support count for BlockwiseMoveUp and BlockwiseMoveDown.
- FIX #26: incorrect cursor position when escaped from visual-blockwise mode.
- FIX #27: Coludn't escape from visual-mode if non-left mouse button is used during drug. Thanks @jackcasey for first PR.
- Refactoring: visual-blockwise and fix corner case bug in shift submode within visual-mode.
- Refactoring: Cleanup mode-manager.coffee, now use Disposable::dispose when deactivating old mode etc...
- Now warn to console if duplicate constructor name is used, this is only for safe guard when developer add new TOM.
- Improve accuracy of TextObject.Function for language which have
meta.function
scope. - Lots of cleanup/refactoring
- Now commands are dispatched via vimState::dispatchCommand which translate command name to klassName with special translation for TextObject
- Explicitly {autoscroll: false} when selection modified by
j
,k
to avoid tail of selection on each movement. #23 - Partially implemented to not expand fold when selection across folded area. folds are expanded by
l
,h
movement. - Add keymap for home, end key.
- FIX deprecation warning for Atom 1.1.0
- Bump supported engines to >=1.1.0
- FIX zs ze broken
- FIX c-f, c-b, c-u, c-d broken after Atom 1.1.0, Fix in 0.1.7 was quick fix and not appropriate behavior.
- New config option to disable 'flashScreenOnSearchHasNoMatch'.
- Don't use atom.commands.onDidDispatch.
- FIX: selectBlockwise select incorrect range in some situation.
- clear hover if ChangeSurroundAnyPair fail to find pair
- FIX: c-f,c-b,c-u,c-d broken after upgrading Atom 1.1.
- FIX: visual block $A operation put cursor on beginning of next line.
- FIX: shift from visual-char2block incorrectly add extra selection when rows contain blank row.
- FIX: p and P didn't correct replace text in visual-linewise mode.
- FIX: In softwrapped line, moveDown/moveUp fail in visual-linewise mode.
- FIX: cursor not when activate visual-blockwise with one clumn selection.
- FIX: move-down, move-up on visual-blockwise throw error when not have tail.
- Revival once disabled text-object quote to select forwarding range.
- New: TextObject.AnyQuote select any next AnyQuote within line.
- Now all TextObject Pair can expand selection.
- Fix TextObject AnyPair incorrectly expand selection when it fail to find pair.
- Add default keymaps on incremental search element for arrow and tab keys.
- FIX: debug feature was broken
- FIX:#4 select area when TextObject is executed via command-pallate(was throw err).
- 1st public release
- 2015.9.21 rename vim-mode to vim-mode-plus
- 2015.8.1 forked from vim-mode.
- Added replace ('R') mode! - @jacekkopecky
- Added the
iW
andaW
text objects! - @jacekkopecky - Made the 't' operator behave correctly when the cursor was already on the
searched character - @jacekkopecky - Fixed the position of the cursor after pasting with 'p' - @jacekkopecky
- Renamed 'command mode' to 'normal mode' - @coolwanglu
- Fixed indentation commands so that they exit visual mode - @bronson
- Implemented horizontal scrolling commands
z s
andz e
- @jacekkopecky
- Fixed an error where repeating an insertion command would not handle characters inserted by packages like autocomplete or bracket-matcher - @jacekkopecky
- Fixed an exception that would occur when using
.
to repeat in certain cases.
- Fixed incorrect cursor motion when exiting visual mode w/ a reversed selection - @t9md
- Added setting to configure the regexp used for numbers and the
ctrl-a
andctrl-x
keybindings - @jacekkopecky
- Fixed cursor position after
dd
command - @bronson - Implement
ap
text-object differently thanip
- MarkusSN
- Fixed an issue that caused the cursor to move left incorrectly when near the end of a line.
- Fixed usages of deprecated APIs
- Fixed usages of deprecated APIs - @hitsmaxft, @jacekkopecky
- Fixed issues with deleting when there are multiple selections - @jacekkopecky
- Added paragraph text-objects 'ip' and 'ap' - @t9md
- Fixed use of a deprecated method - @akonwi
- Added
ctrl-x
andctrl-a
for incrementing and decrementing numbers - @jacekkopecky - Fixed the behavior of scrolling motions in visual mode - @daniloisr
- Fixed issue where canceling the replace operator would delete text - @jacekkopecky
- Implemented repeat search commands: '//', '??', etc - @jacekkopecky
- Fixed issue where registers' contents were overwritten with the empty string - @jacekkopecky
- Made '%', '*' and '#' interact properly with search history @jacekkopecky
- Fixed spurious command bindings on command mode input element - @andischerer
- Added ability to append to register - @jacekkopecky
- Fixed an issue where deactivation would sometimes fail
- Fixed an issue where the search input text was not visible - @tmm1
- Added a different status-bar entry for visual-line mode - @jacekkopecky
- Made repeating insertions work more correctly with multiple cursors
- Fixed bugs in
*
and#
with cursor between words - @jacekkopecky
- Implemented change case operators:
gU
,gu
andg~
- @jacekkopecky - Fixed behavior of repeating
I
andA
insertions - @jacekkopecky
- Fixed an issue where
d
andc
with forward motions would sometimes incorrectly delete the character before the cursor - @deiwin
- Implemented basic version of
i t
operator - @neiled - Made
t
motion repeatable with;
- @jacekkopecky
- Added a service API so that other packages can extend vim-mode - @lloeki
- Added an insert-mode mapping for ctrl-u - @nicolaiskogheim
- Added a setting for using the system clipboard as the default register - @chrisfarms
- Added setting for allowing traversal of line breaks via
h
andl
- @jacekkopecky - Fixed handling of whitespace characters in
B
mapping - @jacekkopecky - Fixed bugs when using counts with
f
,F
,t
andT
mappings - @jacekkopecky
- Added '_' binding - @ftwillms
- Fixed an issue where the '>', '<', and '=' operators would move the cursor incorrectly.
- Make toggle-case operator work with multiple cursors
- Fix regression where '%' stopped working across multiple lines
- Fix some deprecation warnings
- Enter visual mode when selecting text in command mode
- Don't select text after undo
- Always preserve selection of the intially-selected character in visual mode
- Fix bugs in the '%' motion
- Fix bugs in the 'S' operator
- Add o mapping in visual mode, for reversing selections
- Implement toggle-case in visual mode
- Fix bug in 'around word' text object
- Fixed a regression in the handling of the 'cw' command
- Made the replace operator work with multiple cursors
- Fixed the position of the cursor after certain yank operations.
- Fixed an issue where duplicate vim states were created when an editors were moved to different panes.
- Made motions, operators and text-objects work properly in the presence of multiple cursors.
- Fixed a stylesheet issue that caused visual glitches when vim-mode was disabled with the Shadow DOM turned on.
- Fix issue where search panel was not removed properly
- Updated the stylesheet for compatibility with shadow-DOM-enabled editors
- Ctrl-w for delete-to-beginning-of-word in insert mode
- Folding key-bindings
- Remove more deprecated APIs
- Fix behavior of ctrl-D, ctrl-U @anvyzhang
- Fix selection when moving up or down in visual line mode @mdp
- Remove deprecated APIs
- Fix interaction with autocomplete
- Properly re-enable editor input after disabling vim-mode
- Fix typo
- Make go-to-line motions work with operators @gittyupagain
- Allow replacing text with newlines using
r
@dcalhoun - Support smart-case in when searching @isaachess
- Ctrl-c for command mode on mac only @sgtpepper43
- Add css to status bar mode for optional custom styling @e-jigsaw
- Implement
-
,+
, andenter
@roryokane - Fix problem undo'ing in insert mode @bhuga
- Remove use of deprecated APIs
- Fix interaction with autocomplete-plus @klorenz
- Fix
gg
andG
in visual mode @cadwallion - Implement
%
@carlosdcastillo - Add ctags keybindings @tmm1
- Fix tracking of marks when buffer changes @carlosdcastillo
- Fix off-by-one error for characterwise puts @carlosdcastillo
- Add support for undo and repeat to typing operations @bhuga
- Fix keybindings for some OSes @mcnicholls
- Fix visual
ngg
@tony612 - Implement i{, i(, and i" @carlosdcastillo
- Fix off by one errors while selecting with j and k @fotanus
- Implement 'desired cursor column' behavior @iamjwc
- Fix E in visual mode @tony612
- Implement `` @guanlun
- Fix broken behavior when enabling/disabling @cadwallion
- Enable search in visual mode @romankuznietsov
- Fix end-of-line movement @abijr
- Fix behavior of change current line
cc
in various corner cases. @jcurtis - Fix some corner cases of
w
@abijr - Don't hide cursor in visual mode @dyross
- Enable arrow keys in visual mode @fholgado
- Additional bindings for split pane movement @zenhob
- Fix search on invalid regex @bhuga
- Add
s
alias to visual mode @tony612 - Display current mode in the status bar @gblock0
- Add marks (m, `, ') @danzimm
- Add operator-pending mode and a single text object (
iw
) @nathansobo, @jroes - Add an option to start in insert mode @viveksjain
- Fix weird behavior when pasting at the end of a file @msvbg
- More fixes for corner cases in paste behavior @SKAhack
- Implement * and # @roman
- Implement ~ @badunk
- Implement t and T @udp
- Implement
ctrl-e
andctrl-y
@dougblack - Implement
/
,?
,n
andN
@bhuga - Registers are now shared between tabs in a single atom window @bhuga
- Show cursor only in focused editor @tony612
- Docs updated with new methods for entering insert mode @tednaleid
- Implement
r
@bhuga - Fix
w
when on the last word of a file @dougblack - Implement
=
@ciarand - Implement
E
motion @tony612 - Implement basic
ctrl-f
andctrl-b
support @ciarand - Added
+
,*
and%
registers @cschneid - Improved
^
movement when already at the first character @zenhob - Fix off-by-one error for
15gg
@tony612
- API Fixes for Atom 0.62 @bhuga
- Add
$
and^
to visual mode @spyc3r - Add
0
to visual mode @ruedap - Fix for yanking entire lines @chadkouse
- Add
X
operator @ruedap - Add
W
andB
motions @jcurtis - Prevent cursor left at column 0 when switching to insert mode @adrianolaru
- Add pane switching shortcuts see #104 for details @dougblack
- Add
H
,L
andM
motions @dougblack
- Leaving insert mode always moves cursor left @joefiorini
- Implemented
I
command @dysfunction - Restored
0
motion @jroes - Implemented
}
motion to move to previous paragraph @zenhob - Implement
gt
andgT
to cycle through tabs @JosephKu - Implement visual linewise mode @eoinkelly
- Properly clear selection when return to command mode @chadkouse
ctrl-[
now activates command mode @ctbarna- enter now moves down a line in command mode @ctbarna
- Documentation links now work on atom.io @michaeltwofish
- Backspace now moves back a space in command mode @Tarrant
- Fixed an issue where cursors wouldn't appear in the settings view.
- Update contributing guide
- Update package.json
- Require underscore-plus directly
- Implemented
.
operator, thanks to @bhuga - Fix putting at the end of lines, thanks to @bhuga
- Compatibility with Atom 0.50.0
- Switches apm db to buttant from iriscouch
- Compatibilty with Atom 26
- Compatiblity with atom 0.21
- Characterwise visual-mode!
- System copy and paste are now linked to the
*
- Implement
A
operator - Bugfixes concerning
b
andP
- Major refactoring/cleanup/test speedup.
- Added
S
command. - Added
C
operator. - Proper undo/redo transactions for repeated commands.
- Enhance
G
to take line numbers. - Added
Y
operator. - Added
ctrl-c
to enter command mode.
- Added
s
command. - Added
e
motion. - Fixed
cw
removing trailing whitepsace - Fixed cursor position for
dd
when deleting blank lines
- Added the
c
operator (thanks Yosef!) - Cursor appears as block in command mode and blinks when inserting (thanks Corey!)
- Delete operations now save deleted text to the default buffer
- Implement
gg
andG
motions - Implement
P
operator - Implement
o
andO
commands
- Added yank and put command with support for registers
- Added
$
and^
motions - Fixed repeats for commands and motions, ie
d2d
works as expected. - Implemented
D
to delete through the end of the line. - Implemented
>>
and<<
indent and outdent commands. - Implemented
J
. - Implemented
a
to move cursor and enter insert mode. - Add basic scrolling using
ctrl-u
andctrl-d
. - Add basic undo/redo using
u
andctrl-r
. This needs to be improved so it understands vim's semantics.
- Nothing changed, used this as a test release to understand the publishing flow.
- Initial release, somewhat functional but missing many things.