Skip to content

Add Search Functionality #8

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,25 +1,33 @@
# Macros for vim mode plus
This package is still under construction, but the basic functionality works. You can create a single macro and apply it many times.

Searching with `/` definitely doesn't work yet.
This package is still under construction, but the basic functionality works. You can create a single macro and apply it many times.

## Install

`apm install vim-mode-plus-macros` at the command line, or `ctrl-,`, click on install, then type vim-mode-plus-macros and click install.

Make sure you also have vim-mode-plus installed, this package requires it.

## Usage

`q` in normal mode to start recording a macro

`q` in normal mode while recording a macro to stop recording the macro

`@` to apply the macro

`[num]@` to apply the macro [num] times ex. `12@`

## Roadmap

- [x] a macro can be recorded
- [x] a macro can be replayed
- [x] macros can include typing in insert mode
- [x] indicate macro recording state to user
- [x] add searching with '/'
- [x] allow prefixing with number to replay
- [ ] add undoing the entire macro in one undo
- [ ] add searching with 'f', 'F', 't', 'T'
- [ ] macros can be saved to (and recalled from) the 26 letters (e.g. `qa` and `@a`)
- [ ] macros can be named and saved (maybe use a fuzzy finder?)
- [ ] specs
215 changes: 108 additions & 107 deletions keymaps/macro-keymap.cson
Original file line number Diff line number Diff line change
Expand Up @@ -2,112 +2,113 @@
'q': 'vim-mode-plus-macros:start-recording-macro'
'@': 'vim-mode-plus-macros:apply-macro'

'atom-text-editor.vim-mode-plus.normal-mode.recording-macro':
'atom-workspace.recording-macro atom-text-editor.vim-mode-plus.normal-mode':
'q': 'vim-mode-plus-macros:stop-recording-macro'

'atom-text-editor.vim-mode-plus.insert-mode.recording-macro':
'space': 'vim-mode-plus-macros:record-insert-of-space'
'!': 'vim-mode-plus-macros:record-insert-of-!'
'"': 'vim-mode-plus-macros:record-insert-of-"'
'#': 'vim-mode-plus-macros:record-insert-of-#'
'$': 'vim-mode-plus-macros:record-insert-of-$'
'%': 'vim-mode-plus-macros:record-insert-of-%'
'&': 'vim-mode-plus-macros:record-insert-of-&'
'\'': 'vim-mode-plus-macros:record-insert-of-\''
'(': 'vim-mode-plus-macros:record-insert-of-('
')': 'vim-mode-plus-macros:record-insert-of-)'
'*': 'vim-mode-plus-macros:record-insert-of-*'
'+': 'vim-mode-plus-macros:record-insert-of-+'
',': 'vim-mode-plus-macros:record-insert-of-,'
'-': 'vim-mode-plus-macros:record-insert-of--'
'.': 'vim-mode-plus-macros:record-insert-of-.'
'/': 'vim-mode-plus-macros:record-insert-of-/'
'0': 'vim-mode-plus-macros:record-insert-of-0'
'1': 'vim-mode-plus-macros:record-insert-of-1'
'2': 'vim-mode-plus-macros:record-insert-of-2'
'3': 'vim-mode-plus-macros:record-insert-of-3'
'4': 'vim-mode-plus-macros:record-insert-of-4'
'5': 'vim-mode-plus-macros:record-insert-of-5'
'6': 'vim-mode-plus-macros:record-insert-of-6'
'7': 'vim-mode-plus-macros:record-insert-of-7'
'8': 'vim-mode-plus-macros:record-insert-of-8'
'9': 'vim-mode-plus-macros:record-insert-of-9'
'numpad0': 'vim-mode-plus-macros:record-insert-of-0'
'numpad1': 'vim-mode-plus-macros:record-insert-of-1'
'numpad2': 'vim-mode-plus-macros:record-insert-of-2'
'numpad3': 'vim-mode-plus-macros:record-insert-of-3'
'numpad4': 'vim-mode-plus-macros:record-insert-of-4'
'numpad5': 'vim-mode-plus-macros:record-insert-of-5'
'numpad6': 'vim-mode-plus-macros:record-insert-of-6'
'numpad7': 'vim-mode-plus-macros:record-insert-of-7'
'numpad8': 'vim-mode-plus-macros:record-insert-of-8'
'numpad9': 'vim-mode-plus-macros:record-insert-of-9'
':': 'vim-mode-plus-macros:record-insert-of-:'
';': 'vim-mode-plus-macros:record-insert-of-;'
'<': 'vim-mode-plus-macros:record-insert-of-<'
'=': 'vim-mode-plus-macros:record-insert-of-='
'>': 'vim-mode-plus-macros:record-insert-of->'
'?': 'vim-mode-plus-macros:record-insert-of-?'
'@': 'vim-mode-plus-macros:record-insert-of-@'
'A': 'vim-mode-plus-macros:record-insert-of-A'
'B': 'vim-mode-plus-macros:record-insert-of-B'
'C': 'vim-mode-plus-macros:record-insert-of-C'
'D': 'vim-mode-plus-macros:record-insert-of-D'
'E': 'vim-mode-plus-macros:record-insert-of-E'
'F': 'vim-mode-plus-macros:record-insert-of-F'
'G': 'vim-mode-plus-macros:record-insert-of-G'
'H': 'vim-mode-plus-macros:record-insert-of-H'
'I': 'vim-mode-plus-macros:record-insert-of-I'
'J': 'vim-mode-plus-macros:record-insert-of-J'
'K': 'vim-mode-plus-macros:record-insert-of-K'
'L': 'vim-mode-plus-macros:record-insert-of-L'
'M': 'vim-mode-plus-macros:record-insert-of-M'
'N': 'vim-mode-plus-macros:record-insert-of-N'
'O': 'vim-mode-plus-macros:record-insert-of-O'
'P': 'vim-mode-plus-macros:record-insert-of-P'
'Q': 'vim-mode-plus-macros:record-insert-of-Q'
'R': 'vim-mode-plus-macros:record-insert-of-R'
'S': 'vim-mode-plus-macros:record-insert-of-S'
'T': 'vim-mode-plus-macros:record-insert-of-T'
'U': 'vim-mode-plus-macros:record-insert-of-U'
'V': 'vim-mode-plus-macros:record-insert-of-V'
'W': 'vim-mode-plus-macros:record-insert-of-W'
'X': 'vim-mode-plus-macros:record-insert-of-X'
'Y': 'vim-mode-plus-macros:record-insert-of-Y'
'Z': 'vim-mode-plus-macros:record-insert-of-Z'
'[': 'vim-mode-plus-macros:record-insert-of-['
'\\': 'vim-mode-plus-macros:record-insert-of-\\'
']': 'vim-mode-plus-macros:record-insert-of-]'
'^': 'vim-mode-plus-macros:record-insert-of-^'
'_': 'vim-mode-plus-macros:record-insert-of-_'
'`': 'vim-mode-plus-macros:record-insert-of-`'
'a': 'vim-mode-plus-macros:record-insert-of-a'
'b': 'vim-mode-plus-macros:record-insert-of-b'
'c': 'vim-mode-plus-macros:record-insert-of-c'
'd': 'vim-mode-plus-macros:record-insert-of-d'
'e': 'vim-mode-plus-macros:record-insert-of-e'
'f': 'vim-mode-plus-macros:record-insert-of-f'
'g': 'vim-mode-plus-macros:record-insert-of-g'
'h': 'vim-mode-plus-macros:record-insert-of-h'
'i': 'vim-mode-plus-macros:record-insert-of-i'
'j': 'vim-mode-plus-macros:record-insert-of-j'
'k': 'vim-mode-plus-macros:record-insert-of-k'
'l': 'vim-mode-plus-macros:record-insert-of-l'
'm': 'vim-mode-plus-macros:record-insert-of-m'
'n': 'vim-mode-plus-macros:record-insert-of-n'
'o': 'vim-mode-plus-macros:record-insert-of-o'
'p': 'vim-mode-plus-macros:record-insert-of-p'
'q': 'vim-mode-plus-macros:record-insert-of-q'
'r': 'vim-mode-plus-macros:record-insert-of-r'
's': 'vim-mode-plus-macros:record-insert-of-s'
't': 'vim-mode-plus-macros:record-insert-of-t'
'u': 'vim-mode-plus-macros:record-insert-of-u'
'v': 'vim-mode-plus-macros:record-insert-of-v'
'w': 'vim-mode-plus-macros:record-insert-of-w'
'x': 'vim-mode-plus-macros:record-insert-of-x'
'y': 'vim-mode-plus-macros:record-insert-of-y'
'z': 'vim-mode-plus-macros:record-insert-of-z'
'{': 'vim-mode-plus-macros:record-insert-of-{'
'|': 'vim-mode-plus-macros:record-insert-of-|'
'}': 'vim-mode-plus-macros:record-insert-of-}'
'~': 'vim-mode-plus-macros:record-insert-of-~'
'atom-workspace.recording-macro atom-text-editor.vim-mode-plus.insert-mode, \
atom-workspace.recording-macro atom-text-editor.vim-mode-plus-search':
'space': 'vim-mode-plus-macros:insert-of-space'
'!': 'vim-mode-plus-macros:insert-of-!'
'"': 'vim-mode-plus-macros:insert-of-"'
'#': 'vim-mode-plus-macros:insert-of-#'
'$': 'vim-mode-plus-macros:insert-of-$'
'%': 'vim-mode-plus-macros:insert-of-%'
'&': 'vim-mode-plus-macros:insert-of-&'
'\'': 'vim-mode-plus-macros:insert-of-\''
'(': 'vim-mode-plus-macros:insert-of-('
')': 'vim-mode-plus-macros:insert-of-)'
'*': 'vim-mode-plus-macros:insert-of-*'
'+': 'vim-mode-plus-macros:insert-of-+'
',': 'vim-mode-plus-macros:insert-of-,'
'-': 'vim-mode-plus-macros:insert-of--'
'.': 'vim-mode-plus-macros:insert-of-.'
'/': 'vim-mode-plus-macros:insert-of-/'
'0': 'vim-mode-plus-macros:insert-of-0'
'1': 'vim-mode-plus-macros:insert-of-1'
'2': 'vim-mode-plus-macros:insert-of-2'
'3': 'vim-mode-plus-macros:insert-of-3'
'4': 'vim-mode-plus-macros:insert-of-4'
'5': 'vim-mode-plus-macros:insert-of-5'
'6': 'vim-mode-plus-macros:insert-of-6'
'7': 'vim-mode-plus-macros:insert-of-7'
'8': 'vim-mode-plus-macros:insert-of-8'
'9': 'vim-mode-plus-macros:insert-of-9'
'numpad0': 'vim-mode-plus-macros:insert-of-0'
'numpad1': 'vim-mode-plus-macros:insert-of-1'
'numpad2': 'vim-mode-plus-macros:insert-of-2'
'numpad3': 'vim-mode-plus-macros:insert-of-3'
'numpad4': 'vim-mode-plus-macros:insert-of-4'
'numpad5': 'vim-mode-plus-macros:insert-of-5'
'numpad6': 'vim-mode-plus-macros:insert-of-6'
'numpad7': 'vim-mode-plus-macros:insert-of-7'
'numpad8': 'vim-mode-plus-macros:insert-of-8'
'numpad9': 'vim-mode-plus-macros:insert-of-9'
':': 'vim-mode-plus-macros:insert-of-:'
';': 'vim-mode-plus-macros:insert-of-;'
'<': 'vim-mode-plus-macros:insert-of-<'
'=': 'vim-mode-plus-macros:insert-of-='
'>': 'vim-mode-plus-macros:insert-of->'
'?': 'vim-mode-plus-macros:insert-of-?'
'@': 'vim-mode-plus-macros:insert-of-@'
'A': 'vim-mode-plus-macros:insert-of-A'
'B': 'vim-mode-plus-macros:insert-of-B'
'C': 'vim-mode-plus-macros:insert-of-C'
'D': 'vim-mode-plus-macros:insert-of-D'
'E': 'vim-mode-plus-macros:insert-of-E'
'F': 'vim-mode-plus-macros:insert-of-F'
'G': 'vim-mode-plus-macros:insert-of-G'
'H': 'vim-mode-plus-macros:insert-of-H'
'I': 'vim-mode-plus-macros:insert-of-I'
'J': 'vim-mode-plus-macros:insert-of-J'
'K': 'vim-mode-plus-macros:insert-of-K'
'L': 'vim-mode-plus-macros:insert-of-L'
'M': 'vim-mode-plus-macros:insert-of-M'
'N': 'vim-mode-plus-macros:insert-of-N'
'O': 'vim-mode-plus-macros:insert-of-O'
'P': 'vim-mode-plus-macros:insert-of-P'
'Q': 'vim-mode-plus-macros:insert-of-Q'
'R': 'vim-mode-plus-macros:insert-of-R'
'S': 'vim-mode-plus-macros:insert-of-S'
'T': 'vim-mode-plus-macros:insert-of-T'
'U': 'vim-mode-plus-macros:insert-of-U'
'V': 'vim-mode-plus-macros:insert-of-V'
'W': 'vim-mode-plus-macros:insert-of-W'
'X': 'vim-mode-plus-macros:insert-of-X'
'Y': 'vim-mode-plus-macros:insert-of-Y'
'Z': 'vim-mode-plus-macros:insert-of-Z'
'[': 'vim-mode-plus-macros:insert-of-['
'\\': 'vim-mode-plus-macros:insert-of-\\'
']': 'vim-mode-plus-macros:insert-of-]'
'^': 'vim-mode-plus-macros:insert-of-^'
'_': 'vim-mode-plus-macros:insert-of-_'
'`': 'vim-mode-plus-macros:insert-of-`'
'a': 'vim-mode-plus-macros:insert-of-a'
'b': 'vim-mode-plus-macros:insert-of-b'
'c': 'vim-mode-plus-macros:insert-of-c'
'd': 'vim-mode-plus-macros:insert-of-d'
'e': 'vim-mode-plus-macros:insert-of-e'
'f': 'vim-mode-plus-macros:insert-of-f'
'g': 'vim-mode-plus-macros:insert-of-g'
'h': 'vim-mode-plus-macros:insert-of-h'
'i': 'vim-mode-plus-macros:insert-of-i'
'j': 'vim-mode-plus-macros:insert-of-j'
'k': 'vim-mode-plus-macros:insert-of-k'
'l': 'vim-mode-plus-macros:insert-of-l'
'm': 'vim-mode-plus-macros:insert-of-m'
'n': 'vim-mode-plus-macros:insert-of-n'
'o': 'vim-mode-plus-macros:insert-of-o'
'p': 'vim-mode-plus-macros:insert-of-p'
'q': 'vim-mode-plus-macros:insert-of-q'
'r': 'vim-mode-plus-macros:insert-of-r'
's': 'vim-mode-plus-macros:insert-of-s'
't': 'vim-mode-plus-macros:insert-of-t'
'u': 'vim-mode-plus-macros:insert-of-u'
'v': 'vim-mode-plus-macros:insert-of-v'
'w': 'vim-mode-plus-macros:insert-of-w'
'x': 'vim-mode-plus-macros:insert-of-x'
'y': 'vim-mode-plus-macros:insert-of-y'
'z': 'vim-mode-plus-macros:insert-of-z'
'{': 'vim-mode-plus-macros:insert-of-{'
'|': 'vim-mode-plus-macros:insert-of-|'
'}': 'vim-mode-plus-macros:insert-of-}'
'~': 'vim-mode-plus-macros:insert-of-~'
33 changes: 33 additions & 0 deletions lib/main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
"use babel";

const { CompositeDisposable } = require("atom");
const {
characterCommands,
recordCommand,
loadVmpCommands
} = require("./vim-mode-plus-macros");

module.exports = {
activate() {
// Events subscribed to in atom's system can be easily cleaned up with a CompositeDisposable
this.subscriptions = new CompositeDisposable();

this.subscriptions.add(
atom.commands.add("atom-workspace", characterCommands)
);

atom.commands.onDidDispatch(recordCommand);
},

deactivate() {
this.subscriptions.dispose();
},

consumeVim(service) {
const commands = loadVmpCommands(service);
for (const command of Object.values(commands)) {
command.commandPrefix = "vim-mode-plus-macros";
this.subscriptions.add(command.registerCommand());
}
}
};
Loading