Compare commits
No commits in common. "master" and "v0.13.1" have entirely different histories.
13 changed files with 43 additions and 276 deletions
|
|
@ -1,9 +0,0 @@
|
||||||
root = true
|
|
||||||
|
|
||||||
[*]
|
|
||||||
end_of_line = lf
|
|
||||||
insert_final_newline = true
|
|
||||||
|
|
||||||
[*.{coffee,json}]
|
|
||||||
indent_style = space
|
|
||||||
indent_size = 2
|
|
||||||
38
.travis.yml
38
.travis.yml
|
|
@ -1,45 +1,13 @@
|
||||||
## Project specific config ###
|
language: objective-c
|
||||||
language: generic
|
|
||||||
|
|
||||||
env:
|
env:
|
||||||
global:
|
- APM_TEST_PACKAGES="vim-mode"
|
||||||
- APM_TEST_PACKAGES="vim-mode-plus"
|
|
||||||
- ATOM_LINT_WITH_BUNDLED_NODE="true"
|
|
||||||
|
|
||||||
matrix:
|
|
||||||
- ATOM_CHANNEL=stable
|
|
||||||
- ATOM_CHANNEL=beta
|
|
||||||
|
|
||||||
os:
|
|
||||||
- linux
|
|
||||||
|
|
||||||
dist: trusty
|
|
||||||
|
|
||||||
### Generic setup follows ###
|
|
||||||
script:
|
|
||||||
- curl -s -O https://raw.githubusercontent.com/atom/ci/master/build-package.sh
|
|
||||||
- chmod u+x build-package.sh
|
|
||||||
- ./build-package.sh
|
|
||||||
|
|
||||||
notifications:
|
notifications:
|
||||||
email:
|
email:
|
||||||
on_success: never
|
on_success: never
|
||||||
on_failure: change
|
on_failure: change
|
||||||
|
|
||||||
branches:
|
script: 'curl -s https://raw.githubusercontent.com/atom/ci/master/build-package.sh | sh'
|
||||||
only:
|
|
||||||
- master
|
|
||||||
|
|
||||||
git:
|
git:
|
||||||
depth: 10
|
depth: 10
|
||||||
|
|
||||||
sudo: false
|
|
||||||
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
packages:
|
|
||||||
- build-essential
|
|
||||||
- git
|
|
||||||
- libgnome-keyring-dev
|
|
||||||
- libsecret-1-dev
|
|
||||||
- fakeroot
|
|
||||||
|
|
|
||||||
33
CHANGELOG.md
33
CHANGELOG.md
|
|
@ -1,36 +1,3 @@
|
||||||
## (unpublished)
|
|
||||||
|
|
||||||
* Fix `:enew` not working ([#215](https://github.com/lloeki/ex-mode/pull/215))
|
|
||||||
|
|
||||||
## 0.18.0
|
|
||||||
|
|
||||||
* Add Gdefault support ([#191](https://github.com/lloeki/ex-mode/pull/191))
|
|
||||||
* Add :sort command ([#190](https://github.com/lloeki/ex-mode/pull/190))
|
|
||||||
|
|
||||||
## 0.17.0
|
|
||||||
|
|
||||||
* Add support for Atom 1.19 ([#185](https://github.com/lloeki/ex-mode/pull/185))
|
|
||||||
* Added support for canceling ex-mode with Ctrl-C ([#186](https://github.com/lloeki/ex-mode/pull/186))
|
|
||||||
|
|
||||||
## 0.16.0
|
|
||||||
|
|
||||||
* Support for Atom 1.18 and 1.19 ([#184](https://github.com/lloeki/ex-mode/pull/184))
|
|
||||||
|
|
||||||
## 0.15.0
|
|
||||||
* `vim-mode-plus` support!
|
|
||||||
- Add keybinding (@jmarianer)
|
|
||||||
- Support `:substitute` command (@mkiken)
|
|
||||||
- Support marks
|
|
||||||
- Use `vim-mode-plus` in specs
|
|
||||||
|
|
||||||
## 0.14.0
|
|
||||||
* Support `:tabonly` (@jmarianer)
|
|
||||||
* Fix `:x` closing Atom instead of the current pane
|
|
||||||
|
|
||||||
## 0.13.1
|
|
||||||
* Limit addresses to the last line
|
|
||||||
* Fix autocompleting a non existent directory (@mcnicholls)
|
|
||||||
|
|
||||||
## 0.13.0
|
## 0.13.0
|
||||||
* Added basic support for visual marks (e.g. `:'<,'>s/foo/bar`)
|
* Added basic support for visual marks (e.g. `:'<,'>s/foo/bar`)
|
||||||
* Added `smartcase` option to `:set`
|
* Added `smartcase` option to `:set`
|
||||||
|
|
|
||||||
33
README.md
Executable file → Normal file
33
README.md
Executable file → Normal file
|
|
@ -4,9 +4,7 @@ ex-mode for Atom's vim-mode
|
||||||
|
|
||||||
## Use
|
## Use
|
||||||
|
|
||||||
Install both [vim-mode-plus](https://github.com/t9md/atom-vim-mode-plus) (or
|
Install both [vim-mode](https://github.com/atom/vim-mode) and ex-mode. Type `:` in command mode. Enter `w` or `write`.
|
||||||
the deprecated `vim-mode`) and ex-mode. Type `:` in command mode. Enter `w` or
|
|
||||||
`write`.
|
|
||||||
|
|
||||||
## Extend
|
## Extend
|
||||||
|
|
||||||
|
|
@ -30,34 +28,7 @@ atom.packages.onDidActivatePackage (pack) ->
|
||||||
Ex.registerAlias 'Wq', 'wq'
|
Ex.registerAlias 'Wq', 'wq'
|
||||||
```
|
```
|
||||||
|
|
||||||
## Existing commands
|
See `lib/ex.coffee` for some examples commands. Contributions are very welcome!
|
||||||
|
|
||||||
This is the baseline list of commands supported in `ex-mode`.
|
|
||||||
|
|
||||||
| Command | Operation |
|
|
||||||
| --------------------------------------- | ---------------------------------- |
|
|
||||||
| `q/quit/tabc/tabclose` | Close active tab |
|
|
||||||
| `qall/quitall` | Close all tabs |
|
|
||||||
| `tabe/tabedit/tabnew` | Open new tab |
|
|
||||||
| `e/edit/tabe/tabedit/tabnew <file>` | Edit given file |
|
|
||||||
| `tabn/tabnext` | Go to next tab |
|
|
||||||
| `tabp/tabprevious` | Go to previous tab |
|
|
||||||
| `tabo/tabonly` | Close other tabs |
|
|
||||||
| `w/write` | Save active tab |
|
|
||||||
| `w/write/saveas <file>` | Save as |
|
|
||||||
| `wall/wa` | Save all tabs |
|
|
||||||
| `sp/split` | Split window |
|
|
||||||
| `sp/split <file>` | Open file in split window |
|
|
||||||
| `s/substitute` | Substitute regular expression in active line |
|
|
||||||
| `vsp/vsplit` | Vertical split window |
|
|
||||||
| `vsp/vsplit <file>` | Open file in vertical split window |
|
|
||||||
| `delete` | Cut active line |
|
|
||||||
| `yank` | Copy active line |
|
|
||||||
| `set <options>` | Set options |
|
|
||||||
| `sort` | Sort all lines in file |
|
|
||||||
| `sort <line range>` | Sort lines in line range |
|
|
||||||
|
|
||||||
See `lib/ex.coffee` for the implementations of these commands. Contributions are very welcome!
|
|
||||||
|
|
||||||
## Status
|
## Status
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,10 +7,5 @@
|
||||||
|
|
||||||
# For more detailed documentation see
|
# For more detailed documentation see
|
||||||
# https://atom.io/docs/latest/advanced/keymaps
|
# https://atom.io/docs/latest/advanced/keymaps
|
||||||
'atom-text-editor.vim-mode-plus:not(.insert-mode)':
|
|
||||||
':': 'ex-mode:open'
|
|
||||||
'atom-text-editor.ex-mode-editor':
|
|
||||||
'ctrl-c': 'ex-mode:close'
|
|
||||||
'ctrl-[': 'ex-mode:close'
|
|
||||||
'atom-text-editor.vim-mode:not(.insert-mode)':
|
'atom-text-editor.vim-mode:not(.insert-mode)':
|
||||||
':': 'ex-mode:open'
|
':': 'ex-mode:open'
|
||||||
|
|
|
||||||
|
|
@ -14,11 +14,7 @@ class Command
|
||||||
addr = row
|
addr = row
|
||||||
else if str is '$'
|
else if str is '$'
|
||||||
# Lines are 0-indexed in Atom, but 1-indexed in vim.
|
# Lines are 0-indexed in Atom, but 1-indexed in vim.
|
||||||
# The two ways of getting length let us support Atom 1.19's new buffer
|
addr = @editor.getBuffer().lines.length - 1
|
||||||
# implementation (https://github.com/atom/atom/pull/14435) and still
|
|
||||||
# support 1.18 and below
|
|
||||||
buffer = @editor.getBuffer()
|
|
||||||
addr = (buffer.getLineCount?() ? buffer.lines.length) - 1
|
|
||||||
else if str[0] in ["+", "-"]
|
else if str[0] in ["+", "-"]
|
||||||
addr = row + @parseOffset(str)
|
addr = row + @parseOffset(str)
|
||||||
else if not isNaN(str)
|
else if not isNaN(str)
|
||||||
|
|
@ -26,7 +22,7 @@ class Command
|
||||||
else if str[0] is "'" # Parse Mark...
|
else if str[0] is "'" # Parse Mark...
|
||||||
unless @vimState?
|
unless @vimState?
|
||||||
throw new CommandError("Couldn't get access to vim-mode.")
|
throw new CommandError("Couldn't get access to vim-mode.")
|
||||||
mark = @vimState.mark.marks[str[1]]
|
mark = @vimState.marks[str[1]]
|
||||||
unless mark?
|
unless mark?
|
||||||
throw new CommandError("Mark #{str} not set.")
|
throw new CommandError("Mark #{str} not set.")
|
||||||
addr = mark.getEndBufferPosition().row
|
addr = mark.getEndBufferPosition().row
|
||||||
|
|
@ -77,9 +73,7 @@ class Command
|
||||||
return
|
return
|
||||||
|
|
||||||
# Step 4: Address parsing
|
# Step 4: Address parsing
|
||||||
# see comment in parseAddr about line length
|
lastLine = @editor.getBuffer().lines.length - 1
|
||||||
buffer = @editor.getBuffer()
|
|
||||||
lastLine = (buffer.getLineCount?() ? buffer.lines.length) - 1
|
|
||||||
if cl[0] is '%'
|
if cl[0] is '%'
|
||||||
range = [0, lastLine]
|
range = [0, lastLine]
|
||||||
cl = cl[1..]
|
cl = cl[1..]
|
||||||
|
|
|
||||||
|
|
@ -36,9 +36,6 @@ module.exports = ExMode =
|
||||||
@vim = vim
|
@vim = vim
|
||||||
@globalExState.setVim(vim)
|
@globalExState.setVim(vim)
|
||||||
|
|
||||||
consumeVimModePlus: (vim) ->
|
|
||||||
this.consumeVim(vim)
|
|
||||||
|
|
||||||
config:
|
config:
|
||||||
splitbelow:
|
splitbelow:
|
||||||
title: 'Split below'
|
title: 'Split below'
|
||||||
|
|
@ -50,13 +47,3 @@ module.exports = ExMode =
|
||||||
description: 'when splitting, split from right'
|
description: 'when splitting, split from right'
|
||||||
type: 'boolean'
|
type: 'boolean'
|
||||||
default: 'false'
|
default: 'false'
|
||||||
gdefault:
|
|
||||||
title: 'Gdefault'
|
|
||||||
description: 'When on, the ":substitute" flag \'g\' is default on'
|
|
||||||
type: 'boolean'
|
|
||||||
default: 'false'
|
|
||||||
onlyCloseBuffers:
|
|
||||||
title: 'Only close buffers'
|
|
||||||
description: 'When on, quitall only closes all buffers, not entire Atom instance'
|
|
||||||
type: 'boolean'
|
|
||||||
default: 'false'
|
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,7 @@ class ExCommandModeInputElement extends HTMLDivElement
|
||||||
@editorContainer.style.height = "0px"
|
@editorContainer.style.height = "0px"
|
||||||
|
|
||||||
@editorElement = document.createElement "atom-text-editor"
|
@editorElement = document.createElement "atom-text-editor"
|
||||||
@editorElement.classList.add('editor') # Consider this deprecated!
|
@editorElement.classList.add('editor')
|
||||||
@editorElement.classList.add('ex-mode-editor')
|
|
||||||
@editorElement.getModel().setMini(true)
|
@editorElement.getModel().setMini(true)
|
||||||
@editorElement.setAttribute('mini', '')
|
@editorElement.setAttribute('mini', '')
|
||||||
@editorContainer.appendChild(@editorElement)
|
@editorContainer.appendChild(@editorElement)
|
||||||
|
|
@ -41,7 +40,6 @@ class ExCommandModeInputElement extends HTMLDivElement
|
||||||
|
|
||||||
atom.commands.add(@editorElement, 'core:confirm', @confirm.bind(this))
|
atom.commands.add(@editorElement, 'core:confirm', @confirm.bind(this))
|
||||||
atom.commands.add(@editorElement, 'core:cancel', @cancel.bind(this))
|
atom.commands.add(@editorElement, 'core:cancel', @cancel.bind(this))
|
||||||
atom.commands.add(@editorElement, 'ex-mode:close', @cancel.bind(this))
|
|
||||||
atom.commands.add(@editorElement, 'blur', @cancel.bind(this))
|
atom.commands.add(@editorElement, 'blur', @cancel.bind(this))
|
||||||
|
|
||||||
backspace: ->
|
backspace: ->
|
||||||
|
|
|
||||||
104
lib/ex.coffee
104
lib/ex.coffee
|
|
@ -3,7 +3,6 @@ CommandError = require './command-error'
|
||||||
fs = require 'fs-plus'
|
fs = require 'fs-plus'
|
||||||
VimOption = require './vim-option'
|
VimOption = require './vim-option'
|
||||||
_ = require 'underscore-plus'
|
_ = require 'underscore-plus'
|
||||||
atom
|
|
||||||
|
|
||||||
defer = () ->
|
defer = () ->
|
||||||
deferred = {}
|
deferred = {}
|
||||||
|
|
@ -18,12 +17,7 @@ trySave = (func) ->
|
||||||
deferred = defer()
|
deferred = defer()
|
||||||
|
|
||||||
try
|
try
|
||||||
response = func()
|
func()
|
||||||
|
|
||||||
if response instanceof Promise
|
|
||||||
response.then ->
|
|
||||||
deferred.resolve()
|
|
||||||
else
|
|
||||||
deferred.resolve()
|
deferred.resolve()
|
||||||
catch error
|
catch error
|
||||||
if error.message.endsWith('is a directory')
|
if error.message.endsWith('is a directory')
|
||||||
|
|
@ -133,11 +127,7 @@ class Ex
|
||||||
atom.workspace.getActivePane().destroyActiveItem()
|
atom.workspace.getActivePane().destroyActiveItem()
|
||||||
|
|
||||||
quitall: ->
|
quitall: ->
|
||||||
if !atom.config.get('ex-mode.onlyCloseBuffers')
|
|
||||||
atom.close()
|
atom.close()
|
||||||
else
|
|
||||||
atom.workspace.getTextEditors().forEach (editor) ->
|
|
||||||
editor.destroy()
|
|
||||||
|
|
||||||
q: => @quit()
|
q: => @quit()
|
||||||
|
|
||||||
|
|
@ -173,16 +163,6 @@ class Ex
|
||||||
|
|
||||||
tabp: => @tabprevious()
|
tabp: => @tabprevious()
|
||||||
|
|
||||||
tabonly: ->
|
|
||||||
tabBar = atom.workspace.getPanes()[0]
|
|
||||||
tabBarElement = atom.views.getView(tabBar).querySelector(".tab-bar")
|
|
||||||
tabBarElement.querySelector(".right-clicked") && tabBarElement.querySelector(".right-clicked").classList.remove("right-clicked")
|
|
||||||
tabBarElement.querySelector(".active").classList.add("right-clicked")
|
|
||||||
atom.commands.dispatch(tabBarElement, 'tabs:close-other-tabs')
|
|
||||||
tabBarElement.querySelector(".active").classList.remove("right-clicked")
|
|
||||||
|
|
||||||
tabo: => @tabonly()
|
|
||||||
|
|
||||||
edit: ({ range, args, editor }) ->
|
edit: ({ range, args, editor }) ->
|
||||||
filePath = args.trim()
|
filePath = args.trim()
|
||||||
if filePath[0] is '!'
|
if filePath[0] is '!'
|
||||||
|
|
@ -211,7 +191,9 @@ class Ex
|
||||||
e: (args) => @edit(args)
|
e: (args) => @edit(args)
|
||||||
|
|
||||||
enew: ->
|
enew: ->
|
||||||
atom.workspace.open()
|
buffer = atom.workspace.getActiveTextEditor().buffer
|
||||||
|
buffer.setPath(undefined)
|
||||||
|
buffer.load()
|
||||||
|
|
||||||
write: ({ range, args, editor, saveas }) ->
|
write: ({ range, args, editor, saveas }) ->
|
||||||
saveas ?= false
|
saveas ?= false
|
||||||
|
|
@ -229,30 +211,29 @@ class Ex
|
||||||
deferred = defer()
|
deferred = defer()
|
||||||
|
|
||||||
editor = atom.workspace.getActiveTextEditor()
|
editor = atom.workspace.getActiveTextEditor()
|
||||||
|
saved = false
|
||||||
# Case 1; path is provided
|
|
||||||
if filePath.length isnt 0
|
if filePath.length isnt 0
|
||||||
fullPath = getFullPath filePath
|
fullPath = getFullPath(filePath)
|
||||||
|
if editor.getPath()? and (not fullPath? or editor.getPath() == fullPath)
|
||||||
# Only write when it does not exist or we have a force flag set.
|
if saveas
|
||||||
if force or not fs.existsSync(fullPath)
|
throw new CommandError("Argument required")
|
||||||
editor.saveAs(fullPath)
|
|
||||||
return deferred.promise
|
|
||||||
|
|
||||||
throw new CommandError("File exists (add ! to override)")
|
|
||||||
|
|
||||||
# Case 2; no path provided, call editor save.
|
|
||||||
editor = atom.workspace.getActiveTextEditor()
|
|
||||||
|
|
||||||
# Does the current buffer exist?
|
|
||||||
if editor.getPath()? and fs.existsSync(editor.getPath())
|
|
||||||
trySave(-> editor.save()).then(deferred.promise)
|
|
||||||
else
|
else
|
||||||
# Cant see what the better API is but Pane.saveActiveItemAs() is the only call
|
# Use editor.save when no path is given or the path to the file is given
|
||||||
# I could find that states it will ask the user.
|
trySave(-> editor.save()).then(deferred.resolve)
|
||||||
trySave(-> atom.workspace.getActivePane().saveActiveItemAs()).then(deferred.promise)
|
saved = true
|
||||||
|
else if not fullPath?
|
||||||
|
fullPath = atom.showSaveDialogSync()
|
||||||
|
|
||||||
return deferred.promise
|
if not saved and fullPath?
|
||||||
|
if not force and fs.existsSync(fullPath)
|
||||||
|
throw new CommandError("File exists (add ! to override)")
|
||||||
|
if saveas or editor.getFileName() == null
|
||||||
|
editor = atom.workspace.getActiveTextEditor()
|
||||||
|
trySave(-> editor.saveAs(fullPath, editor)).then(deferred.resolve)
|
||||||
|
else
|
||||||
|
trySave(-> saveAs(fullPath, editor)).then(deferred.resolve)
|
||||||
|
|
||||||
|
deferred.promise
|
||||||
|
|
||||||
wall: ->
|
wall: ->
|
||||||
atom.workspace.saveAll()
|
atom.workspace.saveAll()
|
||||||
|
|
@ -261,7 +242,7 @@ class Ex
|
||||||
@write(args)
|
@write(args)
|
||||||
|
|
||||||
wq: (args) =>
|
wq: (args) =>
|
||||||
@write(args).then(=> @quit())
|
@write(args).then => @quit()
|
||||||
|
|
||||||
wa: =>
|
wa: =>
|
||||||
@wall()
|
@wall()
|
||||||
|
|
@ -285,7 +266,6 @@ class Ex
|
||||||
|
|
||||||
xit: (args) => @wq(args)
|
xit: (args) => @wq(args)
|
||||||
|
|
||||||
x: (args) => @xit(args)
|
|
||||||
|
|
||||||
split: ({ range, args }) ->
|
split: ({ range, args }) ->
|
||||||
args = args.trim()
|
args = args.trim()
|
||||||
|
|
@ -344,30 +324,16 @@ class Ex
|
||||||
|
|
||||||
[pattern, substition, flags] = parsed
|
[pattern, substition, flags] = parsed
|
||||||
if pattern is ''
|
if pattern is ''
|
||||||
if vimState.getSearchHistoryItem?
|
|
||||||
# vim-mode
|
|
||||||
pattern = vimState.getSearchHistoryItem()
|
pattern = vimState.getSearchHistoryItem()
|
||||||
else if vimState.searchHistory?
|
|
||||||
# vim-mode-plus
|
|
||||||
pattern = vimState.searchHistory.get('prev')
|
|
||||||
|
|
||||||
if not pattern?
|
if not pattern?
|
||||||
atom.beep()
|
atom.beep()
|
||||||
throw new CommandError('No previous regular expression')
|
throw new CommandError('No previous regular expression')
|
||||||
else
|
else
|
||||||
if vimState.pushSearchHistory?
|
|
||||||
# vim-mode
|
|
||||||
vimState.pushSearchHistory(pattern)
|
vimState.pushSearchHistory(pattern)
|
||||||
else if vimState.searchHistory?
|
|
||||||
# vim-mode-plus
|
|
||||||
vimState.searchHistory.save(pattern)
|
|
||||||
|
|
||||||
try
|
try
|
||||||
flagsObj = {}
|
flagsObj = {}
|
||||||
flags.split('').forEach((flag) -> flagsObj[flag] = true)
|
flags.split('').forEach((flag) -> flagsObj[flag] = true)
|
||||||
# gdefault option
|
|
||||||
if atom.config.get('ex-mode.gdefault')
|
|
||||||
flagsObj.g = !flagsObj.g
|
|
||||||
patternRE = getSearchTerm(pattern, flagsObj)
|
patternRE = getSearchTerm(pattern, flagsObj)
|
||||||
catch e
|
catch e
|
||||||
if e.message.indexOf('Invalid flags supplied to RegExp constructor') is 0
|
if e.message.indexOf('Invalid flags supplied to RegExp constructor') is 0
|
||||||
|
|
@ -449,24 +415,4 @@ class Ex
|
||||||
throw new CommandError("No such option: #{option}")
|
throw new CommandError("No such option: #{option}")
|
||||||
optionProcessor()
|
optionProcessor()
|
||||||
|
|
||||||
sort: ({ range }) =>
|
|
||||||
editor = atom.workspace.getActiveTextEditor()
|
|
||||||
sortingRange = [[]]
|
|
||||||
|
|
||||||
# If no range is provided, the entire file should be sorted.
|
|
||||||
isMultiLine = range[1] - range[0] > 1
|
|
||||||
if isMultiLine
|
|
||||||
sortingRange = [[range[0], 0], [range[1] + 1, 0]]
|
|
||||||
else
|
|
||||||
sortingRange = [[0, 0], [editor.getLastBufferRow(), 0]]
|
|
||||||
|
|
||||||
# Store every bufferedRow string in an array.
|
|
||||||
textLines = []
|
|
||||||
for lineIndex in [sortingRange[0][0]..sortingRange[1][0] - 1]
|
|
||||||
textLines.push(editor.lineTextForBufferRow(lineIndex))
|
|
||||||
|
|
||||||
# Sort the array and join them together with newlines for writing back to the file.
|
|
||||||
sortedText = _.sortBy(textLines).join('\n') + '\n'
|
|
||||||
editor.buffer.setTextInRange(sortingRange, sortedText)
|
|
||||||
|
|
||||||
module.exports = Ex
|
module.exports = Ex
|
||||||
|
|
|
||||||
|
|
@ -56,10 +56,4 @@ class VimOption
|
||||||
noscs: =>
|
noscs: =>
|
||||||
@nosmartcase()
|
@nosmartcase()
|
||||||
|
|
||||||
gdefault: =>
|
|
||||||
atom.config.set("ex-mode.gdefault", true)
|
|
||||||
|
|
||||||
nogdefault: =>
|
|
||||||
atom.config.set("ex-mode.gdefault", false)
|
|
||||||
|
|
||||||
module.exports = VimOption
|
module.exports = VimOption
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "ex-mode",
|
"name": "ex-mode",
|
||||||
"main": "./lib/ex-mode",
|
"main": "./lib/ex-mode",
|
||||||
"version": "0.18.0",
|
"version": "0.13.1",
|
||||||
"description": "Ex for Atom's vim-mode",
|
"description": "Ex for Atom's vim-mode",
|
||||||
"activationCommands": {
|
"activationCommands": {
|
||||||
"atom-workspace": "ex-mode:open"
|
"atom-workspace": "ex-mode:open"
|
||||||
|
|
@ -23,11 +23,6 @@
|
||||||
"versions": {
|
"versions": {
|
||||||
"^0.1.0": "consumeVim"
|
"^0.1.0": "consumeVim"
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"vim-mode-plus": {
|
|
||||||
"versions": {
|
|
||||||
"^0.1.0": "consumeVimModePlus"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"providedServices": {
|
"providedServices": {
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ describe "the commands", ->
|
||||||
[editor, editorElement, vimState, exState, dir, dir2] = []
|
[editor, editorElement, vimState, exState, dir, dir2] = []
|
||||||
projectPath = (fileName) -> path.join(dir, fileName)
|
projectPath = (fileName) -> path.join(dir, fileName)
|
||||||
beforeEach ->
|
beforeEach ->
|
||||||
vimMode = atom.packages.loadPackage('vim-mode-plus')
|
vimMode = atom.packages.loadPackage('vim-mode')
|
||||||
exMode = atom.packages.loadPackage('ex-mode')
|
exMode = atom.packages.loadPackage('ex-mode')
|
||||||
waitsForPromise ->
|
waitsForPromise ->
|
||||||
activationPromise = exMode.activate()
|
activationPromise = exMode.activate()
|
||||||
|
|
@ -42,6 +42,7 @@ describe "the commands", ->
|
||||||
editor = editorElement.getModel()
|
editor = editorElement.getModel()
|
||||||
vimState = vimMode.mainModule.getEditorState(editor)
|
vimState = vimMode.mainModule.getEditorState(editor)
|
||||||
exState = exMode.mainModule.exStates.get(editor)
|
exState = exMode.mainModule.exStates.get(editor)
|
||||||
|
vimState.activateNormalMode()
|
||||||
vimState.resetNormalMode()
|
vimState.resetNormalMode()
|
||||||
editor.setText("abc\ndef\nabc\ndef")
|
editor.setText("abc\ndef\nabc\ndef")
|
||||||
|
|
||||||
|
|
@ -484,13 +485,6 @@ describe "the commands", ->
|
||||||
submitNormalModeInputText('xit')
|
submitNormalModeInputText('xit')
|
||||||
expect(Ex.wq).toHaveBeenCalled()
|
expect(Ex.wq).toHaveBeenCalled()
|
||||||
|
|
||||||
describe ":x", ->
|
|
||||||
it "acts as an alias to :xit", ->
|
|
||||||
spyOn(Ex, 'xit')
|
|
||||||
openEx()
|
|
||||||
submitNormalModeInputText('x')
|
|
||||||
expect(Ex.xit).toHaveBeenCalled()
|
|
||||||
|
|
||||||
describe ":wqall", ->
|
describe ":wqall", ->
|
||||||
it "calls :wall, then :quitall", ->
|
it "calls :wall, then :quitall", ->
|
||||||
spyOn(Ex, 'wall')
|
spyOn(Ex, 'wall')
|
||||||
|
|
@ -715,17 +709,6 @@ describe "the commands", ->
|
||||||
submitNormalModeInputText(':%substitute/abc/ghi/ig')
|
submitNormalModeInputText(':%substitute/abc/ghi/ig')
|
||||||
expect(editor.getText()).toEqual('ghiaghi\ndefdDEF\nghiaghi')
|
expect(editor.getText()).toEqual('ghiaghi\ndefdDEF\nghiaghi')
|
||||||
|
|
||||||
it "set gdefault option", ->
|
|
||||||
openEx()
|
|
||||||
atom.config.set('ex-mode.gdefault', true)
|
|
||||||
submitNormalModeInputText(':substitute/a/x')
|
|
||||||
expect(editor.getText()).toEqual('xbcxABC\ndefdDEF\nabcaABC')
|
|
||||||
|
|
||||||
atom.commands.dispatch(editorElement, 'ex-mode:open')
|
|
||||||
atom.config.set('ex-mode.gdefault', true)
|
|
||||||
submitNormalModeInputText(':substitute/a/x/g')
|
|
||||||
expect(editor.getText()).toEqual('xbcaABC\ndefdDEF\nabcaABC')
|
|
||||||
|
|
||||||
describe ":yank", ->
|
describe ":yank", ->
|
||||||
beforeEach ->
|
beforeEach ->
|
||||||
editor.setText('abc\ndef\nghi\njkl')
|
editor.setText('abc\ndef\nghi\njkl')
|
||||||
|
|
@ -955,14 +938,6 @@ describe "the commands", ->
|
||||||
submitNormalModeInputText(':set nosmartcase')
|
submitNormalModeInputText(':set nosmartcase')
|
||||||
expect(atom.config.get('vim-mode.useSmartcaseForSearch')).toBe(false)
|
expect(atom.config.get('vim-mode.useSmartcaseForSearch')).toBe(false)
|
||||||
|
|
||||||
it "sets (no)gdefault", ->
|
|
||||||
openEx()
|
|
||||||
submitNormalModeInputText(':set gdefault')
|
|
||||||
expect(atom.config.get('ex-mode.gdefault')).toBe(true)
|
|
||||||
atom.commands.dispatch(editorElement, 'ex-mode:open')
|
|
||||||
submitNormalModeInputText(':set nogdefault')
|
|
||||||
expect(atom.config.get('ex-mode.gdefault')).toBe(false)
|
|
||||||
|
|
||||||
describe "aliases", ->
|
describe "aliases", ->
|
||||||
it "calls the aliased function without arguments", ->
|
it "calls the aliased function without arguments", ->
|
||||||
ExClass.registerAlias('W', 'w')
|
ExClass.registerAlias('W', 'w')
|
||||||
|
|
@ -1002,18 +977,3 @@ describe "the commands", ->
|
||||||
expect(calls.length).toEqual 2
|
expect(calls.length).toEqual 2
|
||||||
expect(calls[0].args[0].range).toEqual [0, 2]
|
expect(calls[0].args[0].range).toEqual [0, 2]
|
||||||
expect(calls[1].args[0].range).toEqual [3, 3]
|
expect(calls[1].args[0].range).toEqual [3, 3]
|
||||||
|
|
||||||
describe ':sort', ->
|
|
||||||
beforeEach ->
|
|
||||||
editor.setText('ghi\nabc\njkl\ndef\n142\nzzz\n91xfds9\n')
|
|
||||||
editor.setCursorBufferPosition([0, 0])
|
|
||||||
|
|
||||||
it "sorts entire file if range is not multi-line", ->
|
|
||||||
openEx()
|
|
||||||
submitNormalModeInputText('sort')
|
|
||||||
expect(editor.getText()).toEqual('142\n91xfds9\nabc\ndef\nghi\njkl\nzzz\n')
|
|
||||||
|
|
||||||
it "sorts specific range if range is multi-line", ->
|
|
||||||
openEx()
|
|
||||||
submitNormalModeInputText('2,4sort')
|
|
||||||
expect(editor.getText()).toEqual('ghi\nabc\ndef\njkl\n142\nzzz\n91xfds9\n')
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ helpers = require './spec-helper'
|
||||||
describe "the input element", ->
|
describe "the input element", ->
|
||||||
[editor, editorElement, vimState, exState] = []
|
[editor, editorElement, vimState, exState] = []
|
||||||
beforeEach ->
|
beforeEach ->
|
||||||
vimMode = atom.packages.loadPackage('vim-mode-plus')
|
vimMode = atom.packages.loadPackage('vim-mode')
|
||||||
exMode = atom.packages.loadPackage('ex-mode')
|
exMode = atom.packages.loadPackage('ex-mode')
|
||||||
waitsForPromise ->
|
waitsForPromise ->
|
||||||
activationPromise = exMode.activate()
|
activationPromise = exMode.activate()
|
||||||
|
|
@ -26,6 +26,7 @@ describe "the input element", ->
|
||||||
atom.commands.dispatch(getCommandEditor(), "core:cancel")
|
atom.commands.dispatch(getCommandEditor(), "core:cancel")
|
||||||
vimState = vimMode.mainModule.getEditorState(editor)
|
vimState = vimMode.mainModule.getEditorState(editor)
|
||||||
exState = exMode.mainModule.exStates.get(editor)
|
exState = exMode.mainModule.exStates.get(editor)
|
||||||
|
vimState.activateNormalMode()
|
||||||
vimState.resetNormalMode()
|
vimState.resetNormalMode()
|
||||||
editor.setText("abc\ndef\nabc\ndef")
|
editor.setText("abc\ndef\nabc\ndef")
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue