diff options
Diffstat (limited to 'content_scripts/mode_visual_edit.coffee')
| -rw-r--r-- | content_scripts/mode_visual_edit.coffee | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/content_scripts/mode_visual_edit.coffee b/content_scripts/mode_visual_edit.coffee index 253d892a..a170a2da 100644 --- a/content_scripts/mode_visual_edit.coffee +++ b/content_scripts/mode_visual_edit.coffee @@ -124,10 +124,8 @@ class Movement extends CountPrefix beforeText[beforeText.length - 1] # Test whether the character following the focus is a word character. Leave the selection unchanged. - # We include "." as a word character here. With this, "w" sometimes jumps one word too far. However, it's - # better than leaving it out, in which case "w" jumps backwards! nextCharacterIsWordCharacter: do -> - regexp = /[A-Za-z0-9_]|\./ + regexp = /[A-Za-z0-9_]/ -> regexp.test @getNextForwardCharacter() # Run a movement. For convenience, the following three argument forms are available: @@ -146,16 +144,24 @@ class Movement extends CountPrefix else if args.length == 1 then args[0] else args[...2] - # Perform the movement. + # Word movements are different on Linux and Windows, see #1441. So we implement some of them + # character-by-character. if movement[1] == vimword and movement[0] == forward - if @nextCharacterIsWordCharacter() - @runMovements [ forward, word ], [ forward, word ], [ backward, word ] - else - @runMovements [ forward, word ], [ backward, word ] + while @nextCharacterIsWordCharacter() + return unless @runMovements [ forward, character ] + while @getNextForwardCharacter() and not @nextCharacterIsWordCharacter() + return unless @runMovements [ forward, character ] else if movement[1] == vimword @selection.modify @alterMethod, backward, word + # As above, we implement this character-by-character to get consistent behavior on Windows and Linux. + if movement[1] == word and movement[0] == forward + while @getNextForwardCharacter() and not @nextCharacterIsWordCharacter() + return unless @runMovements [ forward, character ] + while @nextCharacterIsWordCharacter() + return unless @runMovements [ forward, character ] + else @selection.modify @alterMethod, movement... |
