summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rw-r--r--Makefile48
-rw-r--r--ex.c65
-rw-r--r--ex.h43
-rw-r--r--ex_abbreviate.c3
-rw-r--r--ex_ampersand.c3
-rw-r--r--ex_append.c3
-rw-r--r--ex_args.c3
-rw-r--r--ex_change.c3
-rw-r--r--ex_chdir.c3
-rw-r--r--ex_command.c54
-rw-r--r--ex_copy.c3
-rw-r--r--ex_delete.c3
-rw-r--r--ex_edit.c3
-rw-r--r--ex_file.c3
-rw-r--r--ex_global.c3
-rw-r--r--ex_insert.c3
-rw-r--r--ex_join.c3
-rw-r--r--ex_list.c3
-rw-r--r--ex_map.c3
-rw-r--r--ex_mark.c3
-rw-r--r--ex_move.c3
-rw-r--r--ex_next.c3
-rw-r--r--ex_number.c3
-rw-r--r--ex_open.c3
-rw-r--r--ex_preserve.c3
-rw-r--r--ex_print.c3
-rw-r--r--ex_put.c3
-rw-r--r--ex_quit.c3
-rw-r--r--ex_read.c3
-rw-r--r--ex_recover.c3
-rw-r--r--ex_rewind.c3
-rw-r--r--ex_set.c3
-rw-r--r--ex_shell.c3
-rw-r--r--ex_source.c3
-rw-r--r--ex_substitute.c3
-rw-r--r--ex_suspend.c3
-rw-r--r--ex_tag.c3
-rw-r--r--ex_tilde.c3
-rw-r--r--ex_unabbrev.c3
-rw-r--r--ex_undo.c3
-rw-r--r--ex_unmap.c3
-rw-r--r--ex_version.c3
-rw-r--r--ex_visual.c3
-rw-r--r--ex_wq.c3
-rw-r--r--ex_write.c3
-rw-r--r--ex_xit.c3
-rw-r--r--vi.h0
-rw-r--r--vi_command.c290
49 files changed, 629 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..3ee2fdd
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+ex
+vi
+*.o
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..036c036
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,48 @@
+default: vi
+
+vi: ex
+ ln -sf ex $@
+
+ex: ex.o ex_command.o \
+ ex_abbreviate.o\
+ ex_append.o\
+ ex_args.o\
+ ex_change.o\
+ ex_chdir.o\
+ ex_copy.o\
+ ex_delete.o\
+ ex_edit.o\
+ ex_file.o\
+ ex_global.o\
+ ex_insert.o\
+ ex_join.o\
+ ex_list.o\
+ ex_map.o\
+ ex_mark.o\
+ ex_move.o\
+ ex_next.o\
+ ex_number.o\
+ ex_open.o\
+ ex_preserve.o\
+ ex_print.o\
+ ex_put.o\
+ ex_quit.o\
+ ex_read.o\
+ ex_recover.o\
+ ex_rewind.o\
+ ex_set.o\
+ ex_shell.o\
+ ex_source.o\
+ ex_substitute.o\
+ ex_ampersand.o\
+ ex_tilde.o\
+ ex_suspend.o\
+ ex_tag.o\
+ ex_unabbrev.o\
+ ex_undo.o\
+ ex_unmap.o\
+ ex_version.o\
+ ex_visual.o\
+ ex_write.o\
+ ex_wq.o\
+ ex_xit.o\
diff --git a/ex.c b/ex.c
new file mode 100644
index 0000000..14c5c32
--- /dev/null
+++ b/ex.c
@@ -0,0 +1,65 @@
+#define _XOPEN_SOURCE 700
+#include <libgen.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+int main(int argc, char *argv[])
+{
+ int visual = 0;
+ const char *options = "rRsvc:t:w:";
+ if (!strcmp(basename(argv[0]), "vi")) {
+ options = "rRc:t:w:";
+ visual = 1;
+ }
+
+ char *command = NULL;
+ int recovery = 0;
+ int readonly = 0;
+ int batch = 0;
+ char *tag = NULL;
+ int window = 0;
+
+ int c;
+ while ((c = getopt(argc, argv, options)) != -1) {
+ switch (c) {
+ case 'c':
+ command = optarg;
+ break;
+
+ case 'r':
+ recovery = 1;
+ break;
+
+ case 'R':
+ readonly = 1;
+ break;
+
+ case 's':
+ batch = 1;
+ break;
+
+ case 't':
+ tag = optarg;
+ break;
+
+ case 'v':
+ visual = 1;
+ break;
+
+ case 'w':
+ window = atoi(optarg);
+ break;
+
+ default:
+ return 1;
+ }
+ }
+
+ printf("starting in %s mode\n", visual ? "visual" : "line");
+ printf("tag: %s\n", tag ? tag : "-");
+ printf("command: %s\n", command ? command : "-");
+
+ return 0;
+}
diff --git a/ex.h b/ex.h
new file mode 100644
index 0000000..c25f767
--- /dev/null
+++ b/ex.h
@@ -0,0 +1,43 @@
+void ex_abbreviate();
+void ex_append();
+void ex_args();
+void ex_change();
+void ex_chdir();
+void ex_copy();
+void ex_copy();
+void ex_delete();
+void ex_edit();
+void ex_file();
+void ex_global();
+void ex_insert();
+void ex_join();
+void ex_list();
+void ex_map();
+void ex_mark();
+void ex_move();
+void ex_next();
+void ex_number();
+void ex_open();
+void ex_preserve();
+void ex_print();
+void ex_put();
+void ex_quit();
+void ex_read();
+void ex_recover();
+void ex_rewind();
+void ex_set();
+void ex_shell();
+void ex_source();
+void ex_substitute();
+void ex_ampersand();
+void ex_tilde();
+void ex_suspend();
+void ex_tag();
+void ex_unabbrev();
+void ex_undo();
+void ex_unmap();
+void ex_version();
+void ex_visual();
+void ex_write();
+void ex_wq();
+void ex_xit();
diff --git a/ex_abbreviate.c b/ex_abbreviate.c
new file mode 100644
index 0000000..820113d
--- /dev/null
+++ b/ex_abbreviate.c
@@ -0,0 +1,3 @@
+void ex_abbreviate()
+{
+}
diff --git a/ex_ampersand.c b/ex_ampersand.c
new file mode 100644
index 0000000..25a7937
--- /dev/null
+++ b/ex_ampersand.c
@@ -0,0 +1,3 @@
+void ex_ampersand()
+{
+}
diff --git a/ex_append.c b/ex_append.c
new file mode 100644
index 0000000..18aad48
--- /dev/null
+++ b/ex_append.c
@@ -0,0 +1,3 @@
+void ex_append()
+{
+}
diff --git a/ex_args.c b/ex_args.c
new file mode 100644
index 0000000..1931429
--- /dev/null
+++ b/ex_args.c
@@ -0,0 +1,3 @@
+void ex_args()
+{
+}
diff --git a/ex_change.c b/ex_change.c
new file mode 100644
index 0000000..44e752a
--- /dev/null
+++ b/ex_change.c
@@ -0,0 +1,3 @@
+void ex_change()
+{
+}
diff --git a/ex_chdir.c b/ex_chdir.c
new file mode 100644
index 0000000..5156a6b
--- /dev/null
+++ b/ex_chdir.c
@@ -0,0 +1,3 @@
+void ex_chdir()
+{
+}
diff --git a/ex_command.c b/ex_command.c
new file mode 100644
index 0000000..bb491a0
--- /dev/null
+++ b/ex_command.c
@@ -0,0 +1,54 @@
+#include "ex.h"
+
+static struct {
+ const char *sname;
+ const char *lname;
+ void (*fn)();
+} ex_commands[] = {
+ { "ab", "abbreviate", ex_abbreviate },
+ { "a", "append", ex_append },
+ { "ar", "args", ex_args },
+ { "c", "change", ex_change },
+ { "chd", "chdir", ex_chdir },
+ { "co", "copy", ex_copy },
+ { "t", "t", ex_copy },
+ { "d", "delete", ex_delete },
+ { "e", "edit", ex_edit },
+ { "f", "file", ex_file },
+ { "g", "global", ex_global },
+ { "v", "v", ex_global },
+ { "i", "insert", ex_insert },
+ { "j", "join", ex_join },
+ { "l", "list", ex_list },
+ { "map", "map", ex_map },
+ { "ma", "mark", ex_mark },
+ { "k", "k", ex_mark },
+ { "m", "move", ex_move },
+ { "n", "next", ex_next },
+ { "nu", "number", ex_number },
+ { "#", "#", ex_number },
+ { "o", "open", ex_open },
+ { "pre", "preserve", ex_preserve },
+ { "p", "print", ex_print },
+ { "pu", "put", ex_put },
+ { "q", "quit", ex_quit },
+ { "r", "read", ex_read },
+ { "rec", "recover", ex_recover },
+ { "rew", "rewind", ex_rewind },
+ { "se", "set", ex_set },
+ { "sh", "shell", ex_shell },
+ { "so", "source", ex_source },
+ { "s", "substitute", ex_substitute },
+ { "&", "&", ex_ampersand },
+ { "~", "~", ex_tilde },
+ { "su", "suspend", ex_suspend },
+ { "ta", "tag", ex_tag },
+ { "una", "unabbrev", ex_unabbrev },
+ { "u", "undo", ex_undo },
+ { "unm", "unmap", ex_unmap },
+ { "ve", "version", ex_version },
+ { "vi", "visual", ex_visual },
+ { "w", "write", ex_write },
+ { "wq", "wq", ex_wq },
+ { "x", "xit", ex_xit },
+};
diff --git a/ex_copy.c b/ex_copy.c
new file mode 100644
index 0000000..727271a
--- /dev/null
+++ b/ex_copy.c
@@ -0,0 +1,3 @@
+void ex_copy()
+{
+}
diff --git a/ex_delete.c b/ex_delete.c
new file mode 100644
index 0000000..7fdb85c
--- /dev/null
+++ b/ex_delete.c
@@ -0,0 +1,3 @@
+void ex_delete()
+{
+}
diff --git a/ex_edit.c b/ex_edit.c
new file mode 100644
index 0000000..b8639c4
--- /dev/null
+++ b/ex_edit.c
@@ -0,0 +1,3 @@
+void ex_edit()
+{
+}
diff --git a/ex_file.c b/ex_file.c
new file mode 100644
index 0000000..3f99250
--- /dev/null
+++ b/ex_file.c
@@ -0,0 +1,3 @@
+void ex_file()
+{
+}
diff --git a/ex_global.c b/ex_global.c
new file mode 100644
index 0000000..8fc1926
--- /dev/null
+++ b/ex_global.c
@@ -0,0 +1,3 @@
+void ex_global()
+{
+}
diff --git a/ex_insert.c b/ex_insert.c
new file mode 100644
index 0000000..09527f7
--- /dev/null
+++ b/ex_insert.c
@@ -0,0 +1,3 @@
+void ex_insert()
+{
+}
diff --git a/ex_join.c b/ex_join.c
new file mode 100644
index 0000000..32c8f20
--- /dev/null
+++ b/ex_join.c
@@ -0,0 +1,3 @@
+void ex_join()
+{
+}
diff --git a/ex_list.c b/ex_list.c
new file mode 100644
index 0000000..c7d0889
--- /dev/null
+++ b/ex_list.c
@@ -0,0 +1,3 @@
+void ex_list()
+{
+}
diff --git a/ex_map.c b/ex_map.c
new file mode 100644
index 0000000..3796dfe
--- /dev/null
+++ b/ex_map.c
@@ -0,0 +1,3 @@
+void ex_map()
+{
+}
diff --git a/ex_mark.c b/ex_mark.c
new file mode 100644
index 0000000..580af93
--- /dev/null
+++ b/ex_mark.c
@@ -0,0 +1,3 @@
+void ex_mark()
+{
+}
diff --git a/ex_move.c b/ex_move.c
new file mode 100644
index 0000000..4893547
--- /dev/null
+++ b/ex_move.c
@@ -0,0 +1,3 @@
+void ex_move()
+{
+}
diff --git a/ex_next.c b/ex_next.c
new file mode 100644
index 0000000..b6f5c84
--- /dev/null
+++ b/ex_next.c
@@ -0,0 +1,3 @@
+void ex_next()
+{
+}
diff --git a/ex_number.c b/ex_number.c
new file mode 100644
index 0000000..22a0863
--- /dev/null
+++ b/ex_number.c
@@ -0,0 +1,3 @@
+void ex_number()
+{
+}
diff --git a/ex_open.c b/ex_open.c
new file mode 100644
index 0000000..7e94dd4
--- /dev/null
+++ b/ex_open.c
@@ -0,0 +1,3 @@
+void ex_open()
+{
+}
diff --git a/ex_preserve.c b/ex_preserve.c
new file mode 100644
index 0000000..ed94752
--- /dev/null
+++ b/ex_preserve.c
@@ -0,0 +1,3 @@
+void ex_preserve()
+{
+}
diff --git a/ex_print.c b/ex_print.c
new file mode 100644
index 0000000..2106d05
--- /dev/null
+++ b/ex_print.c
@@ -0,0 +1,3 @@
+void ex_print()
+{
+}
diff --git a/ex_put.c b/ex_put.c
new file mode 100644
index 0000000..e981d7e
--- /dev/null
+++ b/ex_put.c
@@ -0,0 +1,3 @@
+void ex_put()
+{
+}
diff --git a/ex_quit.c b/ex_quit.c
new file mode 100644
index 0000000..a59f245
--- /dev/null
+++ b/ex_quit.c
@@ -0,0 +1,3 @@
+void ex_quit()
+{
+}
diff --git a/ex_read.c b/ex_read.c
new file mode 100644
index 0000000..80dbd33
--- /dev/null
+++ b/ex_read.c
@@ -0,0 +1,3 @@
+void ex_read()
+{
+}
diff --git a/ex_recover.c b/ex_recover.c
new file mode 100644
index 0000000..7b22f3c
--- /dev/null
+++ b/ex_recover.c
@@ -0,0 +1,3 @@
+void ex_recover()
+{
+}
diff --git a/ex_rewind.c b/ex_rewind.c
new file mode 100644
index 0000000..3566675
--- /dev/null
+++ b/ex_rewind.c
@@ -0,0 +1,3 @@
+void ex_rewind()
+{
+}
diff --git a/ex_set.c b/ex_set.c
new file mode 100644
index 0000000..2db2625
--- /dev/null
+++ b/ex_set.c
@@ -0,0 +1,3 @@
+void ex_set()
+{
+}
diff --git a/ex_shell.c b/ex_shell.c
new file mode 100644
index 0000000..951fe35
--- /dev/null
+++ b/ex_shell.c
@@ -0,0 +1,3 @@
+void ex_shell()
+{
+}
diff --git a/ex_source.c b/ex_source.c
new file mode 100644
index 0000000..5a5f52c
--- /dev/null
+++ b/ex_source.c
@@ -0,0 +1,3 @@
+void ex_source()
+{
+}
diff --git a/ex_substitute.c b/ex_substitute.c
new file mode 100644
index 0000000..1edbbbe
--- /dev/null
+++ b/ex_substitute.c
@@ -0,0 +1,3 @@
+void ex_substitute()
+{
+}
diff --git a/ex_suspend.c b/ex_suspend.c
new file mode 100644
index 0000000..7484317
--- /dev/null
+++ b/ex_suspend.c
@@ -0,0 +1,3 @@
+void ex_suspend()
+{
+}
diff --git a/ex_tag.c b/ex_tag.c
new file mode 100644
index 0000000..fa79e2f
--- /dev/null
+++ b/ex_tag.c
@@ -0,0 +1,3 @@
+void ex_tag()
+{
+}
diff --git a/ex_tilde.c b/ex_tilde.c
new file mode 100644
index 0000000..bfacf5c
--- /dev/null
+++ b/ex_tilde.c
@@ -0,0 +1,3 @@
+void ex_tilde()
+{
+}
diff --git a/ex_unabbrev.c b/ex_unabbrev.c
new file mode 100644
index 0000000..950e805
--- /dev/null
+++ b/ex_unabbrev.c
@@ -0,0 +1,3 @@
+void ex_unabbrev()
+{
+}
diff --git a/ex_undo.c b/ex_undo.c
new file mode 100644
index 0000000..fd8c6f4
--- /dev/null
+++ b/ex_undo.c
@@ -0,0 +1,3 @@
+void ex_undo()
+{
+}
diff --git a/ex_unmap.c b/ex_unmap.c
new file mode 100644
index 0000000..37d43b9
--- /dev/null
+++ b/ex_unmap.c
@@ -0,0 +1,3 @@
+void ex_unmap()
+{
+}
diff --git a/ex_version.c b/ex_version.c
new file mode 100644
index 0000000..bc14da2
--- /dev/null
+++ b/ex_version.c
@@ -0,0 +1,3 @@
+void ex_version()
+{
+}
diff --git a/ex_visual.c b/ex_visual.c
new file mode 100644
index 0000000..a8267be
--- /dev/null
+++ b/ex_visual.c
@@ -0,0 +1,3 @@
+void ex_visual()
+{
+}
diff --git a/ex_wq.c b/ex_wq.c
new file mode 100644
index 0000000..3b342ee
--- /dev/null
+++ b/ex_wq.c
@@ -0,0 +1,3 @@
+void ex_wq()
+{
+}
diff --git a/ex_write.c b/ex_write.c
new file mode 100644
index 0000000..5c50990
--- /dev/null
+++ b/ex_write.c
@@ -0,0 +1,3 @@
+void ex_write()
+{
+}
diff --git a/ex_xit.c b/ex_xit.c
new file mode 100644
index 0000000..4998132
--- /dev/null
+++ b/ex_xit.c
@@ -0,0 +1,3 @@
+void ex_xit()
+{
+}
diff --git a/vi.h b/vi.h
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/vi.h
diff --git a/vi_command.c b/vi_command.c
new file mode 100644
index 0000000..9776aa1
--- /dev/null
+++ b/vi_command.c
@@ -0,0 +1,290 @@
+#include "vi.h"
+
+#define CTRL(x) (x - 'a' + 1)
+#define ESCAPE '\033'
+
+int vi_command(char buffer, int count, int key)
+{
+ switch (key) {
+ case CTRL('b'):
+ return vi_page_backwards(count);
+
+ case CTRL('d'):
+ return vi_scroll_forward(count);
+
+ case CTRL('e'):
+ return vi_scroll_forward_by_line(count);
+
+ case CTRL('f'):
+ return vi_page_forward(count);
+
+ case CTRL('g'):
+ return vi_display_information();
+
+ case CTRL('h'):
+ case 'h':
+ /* case <erase>: */
+ return vi_move_cursor_backwards(count);
+
+ case '\n':
+ #if CTRL('j') != '\n'
+ case CTRL('j'):
+ #endif
+ #if CTRL('m') != '\r'
+ case CTRL('m'):
+ #endif
+ case CTRL('n'):
+ case 'j':
+ case '\r':
+ case '+':
+ return vi_move_down(count);
+
+ case CTRL('l'):
+ return vi_clear_and_redisplay();
+
+ case CTRL('p'):
+ case 'k':
+ case '-':
+ return vi_move_up(count);
+
+ case CTRL('r'):
+ return vi_redraw_screen();
+
+ case CTRL('u'):
+ return vi_scroll_backward(count);
+
+ case CTRL('y'):
+ return vi_scroll_backward_by_line(count);
+
+ case CTRL('^'):
+ return vi_edit_alternate_file();
+
+ case ESCAPE:
+ return vi_terminate_command_or_input_mode();
+
+ case CTRL(']'):
+ return vi_search_for_tagstring();
+
+ case ' ':
+ case 'l':
+ return vi_move_cursor_forward(count);
+
+ case '!':
+ return vi_replace_text_with_results_from_shell_command(count);
+
+ case '$':
+ return vi_move_cursor_to_end_of_line(count);
+
+ case '%':
+ return vi_move_to_matching_character();
+
+ case '&':
+ return vi_repeat_substitution();
+
+ case '\'':
+ return vi_return_to_previous_context_at_beggining_of_line();
+
+ case '`':
+ return vi_return_to_previous_context();
+
+ /*
+ case '[[':
+ return vi_return_to_previous_section(count);
+
+ case ']]':
+ return vi_move_to_next_section(count);
+ */
+
+ case '^':
+ return vi_move_to_first_non_blank_position_on_current_line();
+
+ case '_':
+ return vi_current_and_line_above(count);
+
+ case '(':
+ return vi_move_back_to_beginning_of_sentence(count);
+
+ case ')':
+ return vi_move_forward_to_begginning_of_sentence(count);
+
+ case '{':
+ return vi_move_back_to_preceding_paragraph(count);
+
+ case '}':
+ return vi_move_forward_to_next_paragraph(count);
+
+ case '|':
+ return vi_move_to_specific_column_position(count);
+
+ case ',':
+ return vi_reverse_find_character(count);
+
+ case '.':
+ return vi_repeat(count);
+
+ case '/':
+ return vi_find_regular_expression();
+
+ case '0':
+ return vi_move_to_first_character_in_line();
+
+ case ':':
+ return vi_execute_ex_command();
+
+ case ';':
+ return vi_repeat_find(count);
+
+ case '<':
+ motion = vi_getmotion();
+ return vi_shift_left(count);
+
+ case '>':
+ motion = vi_getmotion();
+ return vi_shift_right(count);
+
+ case '?':
+ return vi_scan_backwards_for_regular_expression();
+
+ case '@':
+ return vi_execute(); /* buffer */
+
+ case '~':
+ return vi_reverse_case(count);
+
+ case 'a':
+ return vi_append(count);
+
+ case 'A':
+ return vi_append_at_end_of_line(count);
+
+ case 'b':
+ return vi_move_backward_to_preceding_word(count);
+
+ case 'B':
+ return vi_move_backward_to_preceding_bigword(count);
+
+ case 'c':
+ motion = vi_getmotion();
+ return vi_change(buffer, count, motion);
+
+ case 'C':
+ return vi_change_to_end_of_line(buffer, count);
+
+ case 'd':
+ motion = vi_getmotion();
+ return vi_delete(buffer, count, motion);
+
+ case 'D':
+ return vi_delete_to_end_of_line(buffer);
+
+ case 'e':
+ return vi_move_to_end_of_word(count);
+
+ case 'E':
+ return vi_move_to_end_of_bigword(count);
+
+ case 'f':
+ return vi_find_character_in_current_line_forward(count);
+
+ case 'F':
+ return vi_find_character_in_current_line_reverse(count);
+
+ case 'G':
+ return vi_move_to_line(count);
+
+ case 'H':
+ return vi_move_to_top_of_screen(count);
+
+ case 'i':
+ return vi_insert_before_cursor(count);
+
+ case 'I':
+ return vi_insert_at_beginning_of_line(count);
+
+ case 'J':
+ return vi_join(count);
+
+ case 'L':
+ return vi_move_to_bottom_of_screen(count);
+
+ case 'm':
+ return vi_mark();
+
+ case 'M':
+ return vi_move_to_middle_of_screen();
+
+ case 'n':
+ return vi_repeat_regular_expression_find_forward();
+
+ case 'N':
+ return vi_repeat_regular_expression_find_reverse();
+
+ case 'o':
+ return vi_insert_empty_line_below();
+
+ case 'O':
+ return vi_insert_empty_line_above();
+
+ case 'p':
+ return vi_put_from_buffer_following(buffer);
+
+ case 'P':
+ return vi_put_from_buffer_before(buffer);
+
+ case 'Q':
+ return vi_enter_ex_mode();
+
+ case 'r':
+ return vi_replace_character(count);
+
+ case 'R':
+ return vi_replace_characters();
+
+ case 's':
+ return vi_substitute_character(buffer, count);
+
+ case 'S':
+ return vi_substitute_lines(buffer, count);
+
+ case 't':
+ return vi_move_cursor_to_before_character_forward(count);
+
+ case 'T':
+ return vi_move_cursor_to_after_character_reverse(count);
+
+ case 'u':
+ return vi_undo();
+
+ case 'U':
+ return vi_undo_current_line();
+
+ case 'w':
+ return vi_move_to_beginning_of_word(count);
+
+ case 'W':
+ return vi_move_to_beginning_of_bigword(count);
+
+ case 'x':
+ return vi_delete_character_at_cursor(buffer, count);
+
+ case 'X':
+ return vi_delete_character_before_cursor(buffer, count);
+
+ case 'y':
+ motion = vi_getmotion();
+ return vi_yank(buffer, count, motion);
+
+ case 'Y':
+ return vi_yank_current_line(buffer, count);
+
+ case 'z':
+ return vi_redraw_window(count);
+
+ /*
+ case 'ZZ':
+ return vi_exit();
+ */
+ }
+
+ return 0;
+}