From 652d726ebd8cdfcac3e97a801721f33b5b832a0a Mon Sep 17 00:00:00 2001 From: Brian Leung <29217594+leungbk@users.noreply.github.com> Date: Thu, 23 Dec 2021 09:52:18 -0800 Subject: Handle more registers and range types in ex grammar (#1556) * evil-ex.el (evil-ex-grammar): Handle ] and [ registers Co-authored-by: Brian Leung Co-authored-by: Tom Dalziel * evil-ex (evil-ex-grammar): Handle more range types * evil-ex.el (evil-ex-grammar): Handle comma- or semicolon-separated ranges that omit the first argument. The current line will be used as the input. Co-authored-by: Brian Leung Co-authored-by: Nathaniel Nicandro Co-authored-by: Tom Dalziel --- evil-ex.el | 7 +++++-- evil-tests.el | 22 ++++++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/evil-ex.el b/evil-ex.el index bb7cd46..19875ac 100644 --- a/evil-ex.el +++ b/evil-ex.el @@ -67,13 +67,14 @@ (range ("%" #'(evil-ex-full-range)) ("*" #'(evil-ex-last-visual-range)) + ((alt "," ";") line #'(evil-ex-range (evil-ex-current-line) $2)) (line ";" line #'(let ((tmp1 $1)) (save-excursion (goto-line tmp1) (evil-ex-range tmp1 $3)))) (line "," line #'(evil-ex-range $1 $3)) (line #'(evil-ex-range $1 nil)) - ("`" "[-a-zA-Z_<>']" ",`" "[-a-zA-Z_<>']" + ("`" marker-name ",`" marker-name #'(evil-ex-char-marker-range $2 $4))) (line (base (\? offset) search (\? offset) @@ -98,7 +99,7 @@ (offset (+ signed-number #'+)) (marker - ("'" "[-a-zA-Z_<>']" #'(evil-ex-marker $2))) + ("'" marker-name #'(evil-ex-marker $2))) (search forward backward @@ -115,6 +116,8 @@ #'(evil-ex-re-bwd $2)) ("\\?" "\\(?:[\\].\\|[^?]\\)+" "\\?" #'(evil-ex-re-bwd $2))) + (marker-name + "[]\\[-a-zA-Z_<>']") (next "\\\\/" #'(evil-ex-prev-search)) (prev diff --git a/evil-tests.el b/evil-tests.el index 8212efc..be03b05 100644 --- a/evil-tests.el +++ b/evil-tests.el @@ -7192,6 +7192,8 @@ if no previous selection") (evil-ex-line (evil-ex-marker "x") nil)))) (should (equal (evil-ex-parse "`x,`y" nil 'range) '(evil-ex-char-marker-range "x" "y"))) + (should (equal (evil-ex-parse "`[,`]" nil 'range) + '(evil-ex-char-marker-range "[" "]"))) (should (equal (evil-ex-parse "5,+" nil 'range) '(evil-ex-range (evil-ex-line (string-to-number "5") nil) @@ -7244,6 +7246,26 @@ if no previous selection") (evil-ex-last-line) (+ (evil-ex-signed-number (intern "-") (string-to-number "10"))))))) + (should (equal (evil-ex-parse "'[,']" nil 'range) + '(evil-ex-range + (evil-ex-line + (evil-ex-marker "[") + nil) + (evil-ex-line + (evil-ex-marker "]") + nil)))) + (should (equal (evil-ex-parse ",']" nil 'range) + '(evil-ex-range + (evil-ex-current-line) + (evil-ex-line + (evil-ex-marker "]") + nil)))) + (should (equal (evil-ex-parse ";']" nil 'range) + '(evil-ex-range + (evil-ex-current-line) + (evil-ex-line + (evil-ex-marker "]") + nil)))) (should (equal (evil-ex-parse ".+42" nil 'range) '(evil-ex-range (evil-ex-line -- cgit v1.0