aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Leung <29217594+leungbk@users.noreply.github.com>2021-12-23 09:52:18 -0800
committerGitHub <noreply@github.com>2021-12-23 17:52:18 +0000
commit652d726ebd8cdfcac3e97a801721f33b5b832a0a (patch)
tree61dd5712ef36d6d2f39add16ae9c7b2b679f7bdc
parentb5c038729958856b0b194a45daf988c42e97bc58 (diff)
Handle more registers and range types in ex grammar (#1556)
* evil-ex.el (evil-ex-grammar): Handle ] and [ registers Co-authored-by: Brian Leung <leungbk@posteo.net> Co-authored-by: Tom Dalziel <tom_dl@hotmail.com> * 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 <leungbk@posteo.net> Co-authored-by: Nathaniel Nicandro <nathanielnicandro@gmail.com> Co-authored-by: Tom Dalziel <tom_dl@hotmail.com>
-rw-r--r--evil-ex.el7
-rw-r--r--evil-tests.el22
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