- FIX: Reported on Windows 10, search cause
'filter' of undefinedexception on search-model #1155.
- FIX: Revert #1150 to avoid unexpected workflow disruption. Sorry for my lack of scrutiny.
- FIX: Disable Esc for Normal mode during autocomplete #1150 by @charlesangus.
- FIX:
a-f(a-function) in JS when using tree-sitter #1134 by @jonboiser.
- FIX:
groupChangesWhenLeavingInsertModeconfiguration was not properly honored in previous version but now works. #1130- In previous version, even user change it to
falseit still group all changes user make into one change.
- In previous version, even user change it to
- New: Config param
askOptInToEditorScrollPastEndto avoid continuously asking to enableeditor.scrollPastEndconfig. #1062
- FIX: Fix sort operator. Thanks @bennypowers ! #1125
- Breaking, new Default: #1106
setCursorToStartOfChangeOnUndoRedo: nowfalsefor precise cursor placement onundo/redo- To say simply, this is just directly using atom's undo/redo marker for cursor placement.
- To make this work well, careful marker snapshotting(transact, checkpoint) is crucial(#603).
- I consider this change as part of default
stayOnXXX=true.
replaceByDiffOnSurround: nowtruefor better cursor placement and highlight onundo/redo- Old: Replaced whole text. e.g. Replacing
wordwith(word) - New: Modify surrounding text only, intact inner text.
- Old: Replaced whole text. e.g. Replacing
- New: custom surround #1104, #1102(inspirational PR by @isundaylee)
- New
customSurroundPairsconfig is introduced, its value is JSON string with following key-value pair.- key: char to access
- value: array
[openText:string, closeText:string, addSpace:boolean]addSpaceis optional, it control padding space.
- Custom surround can be used in all surround operation(
surround,delete-surround,change-surround) - Example configuration and possible operations
- Config
"vim-mode-plus": customSurroundPairs: ''' { "p": ["<?php", "?>", true], "%": ["<%", "%>", true], "=": ["<%=", "%>", true], "s": ["\\"", "\\""] } '''
y s c p:surround(y s)inner-word(cori w) withp(PHP tag)c s p s:change-surround(c s) fromp(PHP tag) tos(double quotes)d s =:delete-surround(d s) of=(ruby-IRB tag)
- Config
- New
- Support: Set minimum engines to
^1.31.0-beta1. - Fix: TextObject function and fold now work with TreeSitter parser have enabled.
- Function TextObject #1096
- Fold TextObject #1096
- Diff: here
- Improve:
ChangeCasefamily operators(~,g uandg U) now target non-ascii chars. #1085 by @zensoup- Ex:
g Ucan upper-caseαρρtoΑΡΡ.
- Ex:
- Diff: here
- New: BlockComment text-object. #1082
inner-block-comment(i *)- Select from first non-white-space-char to last non-white-space-char within block comment.
a-block-comment(a *)- Select whole block-comment.
- Diff: here
- Improve:
vim-mode-plus:clip-debug-infono longer report diff for default value withtype:arrayconfig.
- Diff: here
- Improve: Now BlockwiseSelection properly select block in hardTab using editor #1052.
- Calculate accurate column by expanidng/de-expanding hardTab of selected row.
- Improve:
j,kmotions now handle hardTab appropriately when moving up and down.- Calculate accurate column by expanidng/de-expanding hardTab of selected row.
- Fix: Apply workaround to broken paragraph motion(
{,})- Which was broken from Atom v1.25.0 because of atom-core's bug. #1047.
- Tweak:
move-to-(next/previous)-fold-(start/end)-with-same-indentcommand.- Previously it used to use indent level of cursor's row.
- Now it use indent level of closest fold cursor's row is contained.
- New: Add following commands for consistency
move-to-previous-fold-end-with-same-indent,move-to-next-fold-end-with-same-indent
- Diff: here
- Fix: Now properly disable
readOnlystate on package deactivation.- Condition
- When user enabled
autoDisableInputMethodWhenLeavingInsertMode - Then deactivate
vim-mode-pluspackage.
- When user enabled
- editor's hiddenInput remain
readOnly = truewhich make editor un-editable.
- Condition
- Diff: here
- New: Introduce new configuration to affect word finding in motion and text-object.
- Purpose
- When finding word in motions(
w,eetc) and text-objet(i wetc), vmp use nonWordCharacters which vary from grammars. - Some grammar treat
-as non-word, but some are not, this inconsistency is a bit confusing. - So user can avoid this inconsistencies by enabling this new setting.
- When finding word in motions(
useLanguageIndependentNonWordCharacters: Enable this to always use samenonWordCharactersregardless of grammar.languageIndependentNonWordCharacters: This value is used only whenuseLanguageIndependentNonWordCharacterswas enabled.- Default value is borrowed from
DEFAULT_NON_WORD_CHARACTERSintext-editor.js.
- Default value is borrowed from
- Purpose
- Diff: here
- Improve:
deMaximizemaximized state also onatom.workspace.onDidAddPaneItemtiming.
- Diff: here
- New, Experiment:
autoDisableInputMethodWhenLeavingInsertModeconfig to auto-disable IME when leavinginsert-mode.- Default
false. - Once this feature was brought by PR#151 then reverted because of unfixable BUG.
- Now retrying to bring same feature in different approach
- setting
readOnlyattribute tofalsethan settinginput.type = "password".
- setting
- Credit: Borrowed whole idea from @frapples's
vim-mode-plus-patch-switch-imepackage. Thanks @frapples!!
- Default
- Diff: here
- New:
hideCommandsFromCommandPaletteconfig which hide commands from command-palette when set totrue#1033, #1034- Default
falseto to make it compatible with older version. - This feature is once implemented in #943 but reverted before releasing it. Because I find no big perf gain by this feature.
- But this time I changed mind, reducing noise when searching palette is good idea.
- Default
- New, Support: Add support helper command. #1037
- To let user paste clipped info when they open issue.
vim-mode-plus:clip-debug-info,vim-mode-plus:clip-debug-info-with-package-info- These command write collected debug info to clipboard with the form of foldable(by
detailtag) to not mess issue board.
- Diff: here
- FIX: Add
altgraphusing version of keymap to to workaround atom-keymap issue @lydell #661, #1031- In many keyboard layouts, such as German, French and Swedish, some characters have to be typed using the AltGr key.
- For example,
i {keymap doesn't work for these keyboard, since to type{, they need to typealtgraph {. - But atom-keymap doesn't treat
altgraphas modifier, so it immediately terminate pendingstate when it seealtgraph. - To workaround this issue, we defined
i altgraph {keymap. other keymap is also defined in same manner. - This fix is temporal workaround should be removed after atom-keymap solve this
altgraphissue.
- Diff: here
- Internal: Code cleanup
- Improve:
ChangeOrderfamily operators now work for non-separated word- Previously,
ChangeOrderfamily operators(e.g.reverse) cannot reverse characters in word. - But now it can reverse, rotate, sort... characters when target have not space or comma separated.
- Old: Can change only order of separated text(space or comma or new line char).
- reverse:
a b cgetc b a - reverse:
a, b, cgetc, b, a - reverse:
abcgetabc(do nothing)
- reverse:
- New: Can change order of non separated text.
- reverse:
a b cgetc b a - reverse:
a, b, cgetc, b, a - reverse:
abcgetcba(this is new)
- reverse:
- Affect child of
ChangeOrderoperators bellow.Reverse,ReverseInnerAnyPairRotate,RotateBackwards,RotateArgumentsOfInnerPair,RotateArgumentsBackwardsOfInnerPair,Sort,SortCaseInsensitively,SortByNumber,
- Old: Can change only order of separated text(space or comma or new line char).
- Previously,
- New: Support activating
replace-modemode frominsert-mode.- Previously it worked, but have some odd behavior, now officially supported.
- New
toggle-replace-modemisc command by which you can shift mode betweeninsertandinsert.replace. #1026 - This command works only in
insert-mode, use this to quickly switch toreplace-modethen back toinsert-mode. - No keymap by default, here is example keymap.
'atom-text-editor.vim-mode-plus.insert-mode': 'ctrl-cmd-r': 'vim-mode-plus:toggle-replace-mode'
- Internal: Introduce
operationStack.runNextto queue operations to run next after current operation finished. - Breaking, Improve: Invert rotation order for following operators(since it's counter-intuitive)
Rotate,RotateBackwards,RotateArgumentsOfInnerPair,RotateArgumentsBackwardsOfInnerPair
- Diff: here
- New, Experimental:
change-subword-occurrencecommand for direct keymap use.- One-key version of
c O.
- One-key version of
- Apply
standardlinting/formatting. As a result fixed lots of minor variable scope related bugs.
- Diff: here
- Fix:
confirmThresholdOnOccurrenceOperationnow properly applied to subword occurrence operation likeg O,c Oetc.- Previously
confirmThresholdOnOccurrenceOperationcheck was just bypassed for subword occurrence.
- Previously
- New, Experimental: Replace text via diff for
TransformStringoperators.- Currently this new way of text mutation is used by
trim-string(g |) andsurroundfamily(disabled by default). - To enable it for
surroundfamily enablereplaceByDiffOnSurroundnew configuration. - How different from normal replace?
- Scenario:
foo- surround ->(foo)- change surround ->{foo}- delete surround ->foo - Normal replace:
- All text transformation is done by replacing old text with new text.
- Replace by diff:
- All text transformation is done inserting/deleting minimum amount of text.
surround: adding(and),change-surround: replace(to{,)to}delete-surround: remove{and}
- Scenario:
- Pros vs Cons
- Pros: Cleaner undo/redo highlight, more accurate cursor staying by using marker to track original position.
- Cons: When redoing/undoing
delete-surround,change-surroundhappens at off-screen position, user doesn't see flash highlight- Because inner text of surround pair is not mutated(so not flashed), This is most significant disadvantage.
- Currently this new way of text mutation is used by
- Internal: Simplify commands registration for vimState bound command in
main.js.
- Diff: here
- Improve: Avoid centering editor-in-editor on
vim-mode-plus:maximize-pane#1014- No longer centering text-editor which is rendered within normal text-editor using block decoration
- This editor-in-editor is created by pkg
git-diff-detailsorinline-git-diff(my fork ofgit-diff-details)
-
Diff: here
-
Fix: Hide bottom gutter on
maximize-pane -
New: Motion, TextObjet, Operator for work with
diffbuffer. #1009-
Operator:
yank-diff-hunk- Yank diff-hunk under cursor with auto-removing leading
+or-char
- Yank diff-hunk under cursor with auto-removing leading
-
Motion:
move-to-next-diff-hunkandmove-to-previous-diff-hunk- Move to next diff-hunk which starts with
+or-char
- Move to next diff-hunk which starts with
-
TextObject:
a-diff-hunkandinner-diff-hunk(No behavior differences in these two text-object)- Just for used by
yank-diff-hunkoperator
- Just for used by
-
Intending to be used in diff output text buffer(e.g. output of
git diff). -
No keymaps are provided, set as you like in your
keymap.cson, here is example.# "source diff" is provided by language-diff package 'atom-text-editor.vim-mode-plus.normal-mode[data-grammar="source diff"]': 'tab': "vim-mode-plus:move-to-next-diff-hunk" 'shift-tab': "vim-mode-plus:move-to-previous-diff-hunk"
-
-
New:
vim-mode-plus:resolve-git-conflictoperator. #1011-
Detail: #1011
-
Quickly replace git-conflict's hunk with
oursortheirsbased on cursor position when you execute this command. -
No keymap provided. Keymap example is here
'atom-text-editor.vim-mode-plus.normal-mode': 'space g c': 'vim-mode-plus:resolve-git-conflict'
-
- Diff: here
- Fix:
j,kthrew exception on folded row which is also soft-wrapped, but no longer. #1003
- Diff: here
- Fix: Remove no longer necessary temporal imperfect workaround of Atom-v1.24.0-beta0 issue. #998
- After Atom-v1.24.0-beta1, no need to workaround beta0 issue since it's fixed.
- Detailed information is here atom/atom#16294.
- Diff: here
- Fix: All code fold related features were broken in Atom-v1.24.0-beta0, but no longer. #1002
- Since
editor.tokenizedBuffer.getFoldableRanges(N)now seems require explicit indentLevel(N).
- Since
- Fix:
vim-mode-plus:reloadandvim-mode-plus:reload-with-dependencieswhich are used for faster dev cycle. #1002
- Diff: here
- Fix: quick fix for cursor become invisible in Atom-v1.24.0-beta0.
- Diff: here
- New, Breaking:
a-foldnow select "conjoined" fold #996- Old:
a-foldjust select current fold only. - New:
a-foldselect all conjoined fold range.- select previous fold if previous fold end at startRow of current fold.
- select next fold if next fold start at endRow of current fold.
- So you can do
- delete(
d z) or yank(y z) wholeif/else-if/elseclause by just two keystrokes. - delete(
d z) or yank(y z) wholetry/catch/finallyclause by just two keystrokes.
- delete(
- Old:
- Fix:
jandkno longer stuck at row when screenRow contains multiple fold. #994, #995- e.g. fold
else if-fold, thenif-fold, then try to cross row byjorkbut couldn't.
- e.g. fold
- Diff: here
- Doc: add youtube movie link on README.md
- Performance: Now
base.jsis not loaded on startup. So we got extra performance boost. #993.- Now in my MacBook Pro Late 2016. it score under 30ms(27ms is fastest record) activation time.
- Support: Now deprecate use of
service.Baseprovided byprovideVimModePlus()service, warn to useservice.getClassinstead.- new
service.getClass: since I decided to not expose bareBaseclass as it was. - new
service.registerCommandsFromSpec: for adding multiple commands which load body lazily
- new
- Internal:
- Move
command-table.json,file-table.jsonto under directlylib/json. #990 - Keep
command-table-pretty.json,file-table-pretty.jsonfor human read. #990
- Move
- Improve: Smooth scroll now no longer depends on jQuery, use
window.requestAnimationFrame()instead #991 - Improve:
TransformStringBySelectListnow useatom-select-listinstead ofspace-pen-view'sSelectListView- As a result, vmp no remove dependency to
space-pen-view
- As a result, vmp no remove dependency to
- Diff: here
- Fix: Allow
numpad0to be used when entering a number before a command #989 by @sunjay- Now: Can set number
1 0bynumpad1 numpad0. - Old:
numpad0incorrectly moved cursor to head of line by incorrect keymap.
- Now: Can set number
- Diff: here
- Improve: Now
FunctionTextObject(i f,a f) can detect more function. #984- Previously vmp can detect only function which parameter-list and body forms single fold.
- Now vmp can detect function if parameter-list and body form different fold.
- Fix: No longer editor freeze when big count was set for
MoveToRelativeLinetargeted operation. #985- E.g.
1 0 0 0 0 0 0 0 0 0 d d,1 0 0 0 0 0 0 0 0 0 y y
- E.g.
- Diff: here
- Support: No longer warning when user enabled
vim-mode.- In old days, I frequently got report who enabled both
vim-modeandvim-mode-plus. - But now
vim-modeis obviously unmaintained, and I think less chance to confuse user.
- In old days, I frequently got report who enabled both
- New, Breaking: Use change-case npm in TransformString operator.
- As a result, added new operators, also non-listed exiting operator improve translate-ability between different case.
SwapCase: Same as existing ToggleCase but add to reflect original change-case's function name.ParamCase: Same as existing DashCase but add to reflect original change-case's function name.PathCase: New transforma_b_ctoa/b/c,camelCasetocamel/case.HeaderCase: New, transformHeaderCasetoHeader-Case,header_casetoHeader-Case.ConstantCase: New, transformConstantCasetoCONSTANT_CASE,constant-casetoCONSTANT_CASE.SentenceCase: New, transformSentenceCasetoSentence case,sentence_casetoSentence case.UpperCaseFirst: New, transformupperCaseFirsttoUpperCaseFirst,abc deftoAbc Def.LowerCaseFirst: New, transformLowerCaseFirsttolowerCaseFirst,ABC DEFtoaBC dEF.
- Breaking: Now
transform-string-by-select-listjust simply shows "Title Case"-ed operator class name.- No longer display different name like it didsplayed
Underscore _forSnakeCaseoperator. Now it just showSnake Case. - Which might confuse you if you've been familier with old names. Sorry, but I think it was unnecessary.
- No longer display different name like it didsplayed
- Performance: Delay loading underscore-plus in operator.
- Internal: Move commandTable generation logic to developer.js
- Diff: here
- Fix: No longer throw exception on keystroke
o escape .whengroupChangesWhenLeavingInsertModehave enabled #966 - Performance: Reduce IOs at package activation further for faster startup #965
- Separate
file-table.jsonfromcommand-table.json. - Optimize command-table data format to reduce file size.
- Now in my MacBook Pro Late 2016. it score around 40ms(38ms-45ms) activation time(measured by package cop).
- This is NOT BAD when considering vmp adds 300+ commands on activation.
- 2017-11-06: 40ms (vmp-v1.20.0 + Atom-v1.23.0-beta1) Now!
- 2017-04-17: 60-80ms (vmp-v0.90.0 + Atom-v1.16.0)
- 2017-01-04: 150ms (vmp-v0.78.0 + Atom-v1.13.0-beta10)
- Separate
- Improve: Longer search-flash duration from 0.5s to 1.0s to more easy to spot found word.
- Support, Doc: No longer warn that CoffeeScript based extension is no longer supported on pkg activation.
- Instead it is now explained in README.md with english correction PR made by @filipewl
- Why I remove now is I noticed that warning was made on newly installed case(bad), it's been a month from this warning was added.
- Support: Update issue template so that issue opener will see TODOs without jumping to link.
- Diff: here
- Improve: Scroll motions
ctrl-f,ctrl-b... now works more correctly in editor having block decoration by @jdanbrown.- Previously amount of scroll was based on screen rows, which doesn't block-decoration take into account.
- Now scroll pixel based, so accurate even if editor have block decoration inline image.
- Improve: Smoother scroll in sequential scroll motion execution.
- Previously when multiple scroll request was made in very short time-gap, it immediately finalize previous request.
- This means user see non-smooth scrollTop change although user enabled smooth scroll feature.
- Now previous request is just cancelled and calculate new scrollTop based on previously requested value.
- So in UX-wise, user no longer see sudden scrollTop change, always see smoooooth scroll congrats!!
- Diff: here
- Change mind:
- Update all vmp-plugins which affect changes in v1.18.0.
- Remove
registerCommandFromSpecmigration code. - Why? migration for passed
specwas not perfect, just confusing. - So I decided to simply let user update to latest, thats works.
- Diff: here
- Fix: user's custom command in
init.jsthrow exception when callingregisterCommand().- Regression introduced in v1.18.0 sorry!
- Diff: here
- Performance: Small activation performance gain by
Base.jsrefactoring and JSON form of command-table. - Fix: Fix broken word motion family from Atom v1.23.0-beta0. #946, #953.
w,b,e,g eand it's variant have been broken after v1.23.0-beta0 was out.- This is because vmp depends Atom's cursor's method to find word.
- But this dependency also make vmp's word motion vulnerable to changes in atom-core.
- So this time, did overhaul these word-motion to not use cursors's method
- Internal:
- Changes in how vmp commands are loaded.
- Previously, each operation class need to calll
register()in it's own file.- e.g. call
MoveDown.register()in./motion.js. - This mechanism was once useful, especially as executable-class-body when vmp was written in coffee-script.
- e.g. call
- Now all operations class are jus
requre-ed by/base.jsand manually registerd.- So less magic, more explicit, easy to understand.
- Previously, each operation class need to calll
- Use JSON format for command-table for faster activation. #958
- This involve changes in field name of command spec.
- So also updated vmp plugins which use
registerCommandFromSpecfunction provided as vmp service.
- Introduce
findInEditorutility and cleanup lot of boilerplate code by using this new utility.
- Changes in how vmp commands are loaded.
- Diff: here
- Improve: Hide some vmp commands from command-palette #943
- Hide only super-basic small num of commands only whic is defined in
main.js - I evaluated hide all vmp commands in #943 but reverted
- I was expected hiding all vmp commands improve command-palette's responsiveness but it was not.
- So I took benefit to invoke all vmp command from palette as of now.
- Hide only super-basic small num of commands only whic is defined in
- Improve:
c j,c kat first or last buffer row no longer enter insert-mode. - Fix: In v1.23.0-beta0, some TextObject(e.g
fold,comment) did not work. - Support: set minimum engines to
1.22.0 - Internal, Breaking: Remove
ModeManagerclass and re-blend it toVimState.- In original vim-mode, mode handling was done in
VimState. - I extracted mode handling as
ModeManager. - But now ModeManager’s task now get very small, I’m OK to re-blend it again.
- Add deprecation warning when calling old
ModeManager's event API.
- In original vim-mode, mode handling was done in
- Internal:
insert-mode's task done inModeManageris now handled inActivateInsertModeoperation class.- Remove
replace-mode-backspacecommand- This was mapped from
backspaceininsert.replacemode. - But now achieve same functionality by overriding
core:backspace. - So, this intermediate command is no longer necessary.
- This was mapped from
- Remove
- Diff: here
- New: Motion to scroll to function and redraw at uppper middle.
- Following two commands are defined(no keymap by default)
move-to-previous-function-and-redraw-cursor-line-at-upper-middlemove-to-next-function-and-redraw-cursor-line-at-upper-middle
- I created this command to use in vmp-demo at vimConf2017.
- Following two commands are defined(no keymap by default)
- Internal: Refacotoring.
- Fix: Amount of scroll rows was not symmetric in
ctrl-dandctrl-u, but now fixed. - Improve: Use TextBuffer's new
onDidChangeTextevent to flash for undo/redo. #941.
- Diff: here
- Breaking: Rename confusing
ScrollXXX(It easily be confused with scroll motions(ctrl-fetc..)ScrollDown(ctrl-e) toMiniScrollDownScrollUp(ctrl-y) toMiniScrollUp
- New: Smooth scroll option plus more for
MiniScroll(ctrl-y,ctrl-e)smoothScrollOnMiniScroll: defaultfalsesmoothScrollOnMiniScrollDuration: default200defaultScrollRowsOnMiniScroll: default1
- New: Smooth scroll option for
redraw-cursor-linecommands.redraw-cursor-lineiszbegging command likez t,z u,z z,z betc..- Default disabled, I need this when I do demo. With smooth scroll on
z u, less chance to leave behind audiences. smoothScrollOnRedrawCursorLine: defaultfalsesmoothScrollOnRedrawCursorLineDuration: default300
- New, Experimental: New scroll motion to scroll 1/4.
ScrollQuarterScreenDown: keymapg ctrl-dScrollQuarterScreenUp: keymapg ctrl-u- Smooth scroll options are NOT explicitly provided, it use
ScrollHalf's config.
- Internal: Rename non-straightforward naming
- From
SelectInVisualModetoVisualModeSelect - From
isAsTargetExceptSelectInVisualModetoisTargetOfNormalOperator
- From
- Diff: here
- Fix: Remove spec for now removed feature.
- Diff: here
- Fix:
transform-string-by-select-listthrow exception when executed invisual-mode.- Regression by operator execution model redesign from v1.13.0.
- Internal:
- Improve how
transform-string-by-external-commandis executed. - Remove
OperationAbortedErrorwhich is vmp specific error used toabort()operation, but now no longer used.
- Improve how
- New, Experimental:
JoinTargetoperator(wanted to name justJoinbut 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 Xfamily to redraw cursor line atupper-middle. #932- Keymap and Command
z u:redraw-cursor-line-at-upper-middlez space:redraw-cursor-line-at-upper-middle-and-move-to-first-character-of-line
- Conflict:
z uwith pureVim'sspellfilerelated 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
ScrollCursorToTopcommands. #932z enter:ScrollCursorToToptoRedrawCursorLineAtTopAndMoveToFirstCharacterOfLinez t:ScrollCursorToTopLeavetoRedrawCursorLineAtTopz .:ScrollCursorToMiddletoRedrawCursorLineAtMiddleAndMoveToFirstCharacterOfLinez z:ScrollCursorToMiddleLeavetoRedrawCursorLineAtMiddlez -:ScrollCursorToBottomtoRedrawCursorLineAtBottomAndMoveToFirstCharacterOfLinez b:ScrollCursorToBottomLeavetoRedrawCursorLineAtBottom
- Internal: Remove
Operator.prototype.requireTarget, now all operator have target.- Use
target = "Empty"for oldrequireTarget = falseequivalent.
- Use
- Internal: Remove casual use of
isCompleteand renamed toisReadyas prep for upcoming refactoring. #933- Now
isReady(wasisComplete) is used only inoperationStack. - For input taking
MiscCommandfamily command such asmark,insert-registernow executed in async. - All operators which take extra input now executed in async(no longer user
requireInputmechanism). - At this point,
requireInputis used only by Motion, which I cannot make it simply transform to useasyncexecution. - 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-originalflashes 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-sfor macOS user). - This is maybe useful when you change code with keeping original code as reference.
- e.g. If I keymap
g shift-cmd-Dtovim-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
supportEarlySelectflag used bysurroundandreplaceoperator #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 skipselectTargetby checking if it's already selected. - New: Just execute and
awaituser's input(simple and no complex skipselectTargetscenario).
- Old: Select target before
- As result of this re-design,
surroundandreplaceoperator 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 pupdate register's content register's type- Old: Save with register's type
linewise, immediate paste(cmd-v) ininsert-modesurprise user.- Since replaced text by
cwascharacterwise, but pasted text add extra newline(\n).
- Since replaced text by
- New: Save with register's type
characterwise, and immediate paste(cmd-v) ininsert-modeworks as expected.
- Old: Save with register's type
- When
- Improve: Spec helper
- New:
ensureWaitis likeensure, but it wait till finish operation for asyncexecution - Breaking: Remove
ensureByDispatchsince it's non essential, just wrapper. I want manage minimum set ofensurefamily. - Breaking: Disallow
keystrokehelper(after confirmed that it's not used by vmp and vmp-plugins). - Improve:
ensurenow 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
keystrokehelper).
- 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-edgemotion did not work correctly in soft-wrapped editor.- Regression from v1.11.0.
- Diff: here
- Fix: No
rwith'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
rwith'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-paircannot find surround pair.
- Diff: here
- Fix: No longer throw exception when
demo-modepkg was activated, regression from v1.11.0. - Fix
remove-leading-white-spacesoperator work properly again regression from v1.11.0. - Improve: #701, When
wrapLeftRightMotionis enabled andlinvCnow can select new-line(can stop at column 0 of next-line). - Internal: No longer expect
Operator.protoype.setTargetreturn instance.- This eliminate unessential contract between caller/callee.
- Diff: here
- Fix:
z cno 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.globalStatewas not populated.- E.g.
pane:split-right,pane:split-downon 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-searchcommand now correctly clear/re-highlight when value changed #918- This is regression introduced in v1.10.0 sorry!
- Improve:
toggle-foldnow work with multiple cursors. - Improve, Breaking: How text-object function detect function scopes
- Improve: function scope detection for
type-script. - Improve, Breaking:
source.jsandsource.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-linesoperator, which adds line number to each line.- No default keymap, accessible via
transform-string-by-select-list(ctrl-sfor macOS user) command.
- No default keymap, accessible via
- Improve:
z t,z enterworks properly when last screen row was visible. @dcalhoun #915.editor.scrollPastEndneed to betrueto work these command properly, so show notification if not enabled.
- Fix:
z edid 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
ScrollWithoutChangingCursorPositionused for misc-scroll commands.
- Diff: here
- Fix: [CRITICAL] No longer throw exception by lack of
semverdependency. 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-startetc.. - 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-sfor 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-spacesoperator(g spacefor 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:
blackholeRegisteredOperatorsto disable register update for selected operator commands. #901, #902- Old
dontUpdateRegisterOnChangeOrSubstituteare 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:
TransformStringByExternalCommandoperator now correctly shift tonormal-modeafter operation finished.- This operator is specifically used by
vim-mode-plus-replace-with-executionpkg(was broken, but recover now).
- This operator is specifically used by
- Diff: here
- Maintenance: Add
Base.initClassas alias ofBase.extendfor upcoming vmp changes.
- Diff: here
- New:
selectoperator just forselecttarget.selectis super essential operator which have been used in every motion invisual-mode.- But this
selectoperator was not available as command. - Now vmp expose this as
selectoperator with slight modification.- Original
Selectoperator used invisual-modewas renamed toSelectInVisualMode. - The diff between
SelectandSelectInVisualModeisSelectacceptpreset-occurrenceandpersistent-selectionbutSelectInVisualModeis not so that user can modify selection without being interfered by existingpreset-occurrenceandpersistent-selection.
- Original
- New Config:
keymapSToSelectconditional keymap. When enabled,sbehaves asselectoperator.s p: select paragraph. Equivalent tov i p.s i i: selectinner-indentationEquivalent tov i i.s o p: selectoccurrencein paragraph.g o s p: selectoccurrencein paragraph(usepreset-occurrencebyg o).s o p o escape: Place cursors to each start position ofoccurrencein paragraph.s o p I: insert at start position ofoccurrencein paragraph.s o p A: insert at end position ofoccurrencein 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-markersing o(preset-occurrence), orc o(usingomodifier) operation. - Allows cancellation to avoid editor become unresponsive while creating tons of markers.
- e.g. If you
g oaccidentally 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-entireinoperator-pending-modefor Linux and Windows.- Windows and Linux user can
ctrl-aas shorthand ofi e(inner-entire).- Usage example:
y ctrl-ato yank all text in buffer.
- Usage example:
- For macOS user
cmd-ais provided as shorthand ofi ein 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
startandendversion of this commands are provided.
- Previously only
- Diff: here
- Fix:
f escape fno longer throw exception whenreuseFindForRepeatFindwas enabled #883 - New:
insert-at-head-of-targetoperator, 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
rsurroundfamily,split-stringfamily,join-by-inputfamily
- 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-modein 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-linemodifying 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-operationnow aware ofoperator-bound-wise.- Behavior diff: Diff appears in
occurrence-operation.- Old: Always worked as
characterwise. - New: Works as
linewisewhenVoperator-modifier is used.linewise-bound-operator(e.g.g /,>innormal-mode,D,Yinvisual-modeetc) is used.
- Old: Always worked as
- What is
occurrence-operationandoperator-bound-wise?occurrence-operation: Operation withomodifier(e.g.c o f) or operation with preset-occurrence(e.g.g o c f).operator-bound-wise:D,C,Yinvisual-modeandVforced operation liked V p.
- Example(See also animation GIF in PR #879)
- Assume non consecutive
console.loglines scattered in function and you want to bulk appply operation linewise-ly. - First place cursor at
consoleofconsole.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 porg 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
Voperator-modifier orwise-bound-operatoris used, operation's wise is forced to this bound wise. - When
occurrence-operationis 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
oorg o, it works aslinewise.
- When you use these operation with
- You can force wise to
linewisebyVoperator-modifier, in this case occurrence-operation also workslinewise. - Also remember you can distinguish [
candC], [yandY], [dandD] invisual-linewisemode.- Use lower letter(
c,y,d) if you wantcharacterwisebehavior. - Use capital letter(
c,y,d) if you wantlinewisebehavior.
- 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-moderespectSelectNext#wordSelectedstate forfind-and-replace.- Original
cmd-dselect 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-dis executed innormal-mode, vmp modify selection internally, which breaks statefind-and-replacekeep internally. - Behavior diff with text
atom atomic atom.- Old:
cmd-dtwice select 1st and 2ndatom. Here,atomofatomicis selected, bad!. - New:
cmd-dtwice select 1st and 3rdatom.
- Old:
- Original
- Fix: #872
cmd-f(find-and-replace:show), search word, confirm thenescapeto clear selection no longer reset cursor position to wherecmd-fwas started.- This happens when
cmd-fstarted with non-empty selection.
- This happens when
- Fix: #873 Now whenever outer-vmp command modify selection, vmp starts
visual-modeaccordingly.- 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-modeat (1), then reset tonormal-modeat (2). - This is NOT elegant solution, but there is no other better way.
- We cannot determine selection is eventually cleared or not within
editor.onDidChangeSelectionRangeevent. - 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?
0is for yank,1-9is forchangeanddelete.-is for smallchangeanddelete, whatsmallmeans 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,rdid not work correctly when user modified.plain.textgrammar. #869- This issue only happens when user set
.plain.textgrammar to havesoftWraptotrueandsoftWrapHangingIndentto non-zero value.
- This issue only happens when user set
- New, Experimental: SequentialPaste for
p,Pandreplace-with-register.- Unnamed register(
") maintain history at maximumsequentialPasteMaxHistory. - When user execute
psequentially, 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:
ffamily related- Improve: Restore original scrollTop when
findAcrossLinesenabled and cancelled after scroll. - Rename config:
keymapSemicolonToConfirmFindtokeymapSemicolonToConfirmOnFindInput(auto-migrate) - Improve: Empty confirm no longer move cursor when
findCharsMax> 1. - New: Commands
find-next-pre-confirmedandfind-previous-pre-confirmed.- Scope: Available when
ffamily waiting for input(atom-text-editor.vim-mode-plus-input.find). - Keymap:
tab, andshift-tabis mapped by default. - Why?
- Allow you to adjust landing target BEFORE confirm to skip un-aimed stop interactively.
- In most case, using
;or,afterffinished is OK. - But when
fis 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-confirmedandfind-previous-pre-confirmed.
- When enabled,
- Maintenance: Remove
[EXPERIMENTAL]tag from description offindAcrossLinessettings, since we found it useful. - Improve: Fix several highlight inconsistencies.
- Improve: Restore original scrollTop when
- Fix: Incorrect cursor rendering when
automaticallyEscapeInsertModeOnActivePaneItemChangeis enabled. #855- When
automaticallyEscapeInsertModeOnActivePaneItemChangeis 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
onDidStopChangingActivePaneItemhook.
- 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-occurrencemarker,IandAbehave as operator which taketarget. - e.g.
I p,A pto insert at start or end ofpreset-occurrencein paragraph(p).
- Improve: Now
maximize-paneno longer automaticallyde-maximizedon 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-occurrencenow visit in ordered by buffer position. #864- Following behavioral change is noticeable only when user create multiple
preset-occurrencefor different word.- old:
tab,shift-tabvisitpreset-occurrencein created order. - new:
tab,shift-tabvisitpreset-occurrencein 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
findAcrossLineswas 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:
findCharsMaxoptions 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 toachar) is behavior whenfindCharsMaxis1. - 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 = trueis equals tofindCharsMax = 2, and migrated on first time activation.
- If
- Rename:
findByTwoCharsAutoConfirmTimeouttofindConfirmByTimeout( generalize naming )
- Diff: here
- New, Experimental:
findAcrossLines: defaultfalse- When
true,fsearches over next lines. Affectsf,F,t,T. - [Collecting feedback] twitter: @t9md or #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 bytabandshift-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 = truetofindCharsMax = 2 - Renamed:
findByTwoCharsAutoConfirmTimeouttofindConfirmByTimeout
- Parameterized:
- New: [Summary] Now
fis 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,Tasrepeat-findlikeclever-f. - Maybe reading test-spec for these feature is clearer than reading following explanation.
atom-vim-mode-plus/spec/motion-find-spec.coffee
Lines 291 to 369 in 3965141
- 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: defaultfalseuseSmartcaseForFind: defaultfalsehighlightFindChar: 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,
faccept TWO chars.- Pros. Greatly reduces possible matches, avoid being stopped at earlier spot than where you aimed.
- Cons. Require explicit confirmation by
enterfor single char-input. You might mitigate frustration by.- Confirm by
;, easier to type and well blend to forwardingrepeat-find(;).- Enable "keymap
;to confirmfindmotion"(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
findByTwoCharswas enabled, automatically confirm single-char input on timeout( msec ). 0means no timeout.
- "When
reuseFindForRepeatFind: defaultfalse- When
trueyou can repeat last-find byfandF(alsotandT). - You still can use
,and;. - e.g.
f a fmove 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
stayOnprefixed configuration have new defaultfalse. - New default behavior is NOT compatible with pure-Vim.
- Set all
stayOnprefixed configuration tofalseto revert to previous behavior.
- Set all
- Some configuration parameter name is renamed to have
stayOnprefix.- Automatically migrate existing config on activation of vmp.
- What is
stayOnXXXconfiguration?- 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: