aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/functional/ui/icmmulti_spec.lua692
-rw-r--r--test/functional/ui/inccommand_spec.lua665
2 files changed, 664 insertions, 693 deletions
diff --git a/test/functional/ui/icmmulti_spec.lua b/test/functional/ui/icmmulti_spec.lua
deleted file mode 100644
index 81ceaec111..0000000000
--- a/test/functional/ui/icmmulti_spec.lua
+++ /dev/null
@@ -1,692 +0,0 @@
-local helpers = require('test.functional.helpers')(after_each)
-local Screen = require('test.functional.ui.screen')
-local clear = helpers.clear
-local command = helpers.command
-local curbufmeths = helpers.curbufmeths
-local eq = helpers.eq
-local eval = helpers.eval
-local feed_command = helpers.feed_command
-local expect = helpers.expect
-local feed = helpers.feed
-local insert = helpers.insert
-local meths = helpers.meths
-local neq = helpers.neq
-local ok = helpers.ok
-local source = helpers.source
-local wait = helpers.wait
-local nvim = helpers.nvim
-
-local multiline_text = [[
- 1 2 3
- A B C
- 4 5 6
- X Y Z
- 7 8 9
-]]
-
-local multimatch_text = [[
- a bdc eae a fgl lzia r
- x
-]]
-
-local multibyte_text = [[
- £ ¥ ѫѫ PEPPERS
-£ ¥ ѫfѫ
- a£ ѫ¥KOL
-£ ¥ libm
-£ ¥
-]]
-
-local long_multiline_text = [[
- 1 2 3
- A B C
- 4 5 6
- X Y Z
- 7 8 9
- K L M
- a b c
- d e f
- q r s
- x y z
- £ m n
- t œ ¥
-]]
-local function common_setup(screen, inccommand, text)
- if screen then
- command("syntax on")
- command("set nohlsearch")
- command("hi Substitute guifg=red guibg=yellow")
- screen:attach()
- screen:set_default_attr_ids({
- [1] = {foreground = Screen.colors.Fuchsia},
- [2] = {foreground = Screen.colors.Brown, bold = true},
- [3] = {foreground = Screen.colors.SlateBlue},
- [4] = {bold = true, foreground = Screen.colors.SlateBlue},
- [5] = {foreground = Screen.colors.DarkCyan},
- [6] = {bold = true},
- [7] = {underline = true, bold = true, foreground = Screen.colors.SlateBlue},
- [8] = {foreground = Screen.colors.Slateblue, underline = true},
- [9] = {background = Screen.colors.Yellow},
- [10] = {reverse = true},
- [11] = {reverse = true, bold=true},
- [12] = {foreground = Screen.colors.Red, background = Screen.colors.Yellow},
- [13] = {bold = true, foreground = Screen.colors.SeaGreen},
- [14] = {foreground = Screen.colors.White, background = Screen.colors.Red},
- [15] = {bold=true, foreground=Screen.colors.Blue},
- [16] = {background=Screen.colors.Grey90}, -- cursorline
- vis = {background=Screen.colors.LightGrey}
- })
- end
-
- command("set inccommand=" .. (inccommand and inccommand or ""))
-
- if text then
- insert(text)
- end
-end
-
-describe(":substitute", function()
- local screen = Screen.new(30,15)
-
- before_each(function()
- clear()
- end)
-
- it(", inccomand=split, highlights multiline substitutions", function()
- common_setup(screen, "split", multiline_text)
- feed("gg")
-
- feed(":%s/2\\_.*X/MMM")
- screen:expect([[
- 1 {12:MMM} Y Z |
- 7 8 9 |
- |
- {15:~ }|
- {15:~ }|
- {11:[No Name] [+] }|
- |1| 1 {12:MMM} Y Z |
- |
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {10:[Preview] }|
- :%s/2\_.*X/MMM^ |
- ]])
-
- feed("\\rK\\rLLL")
- screen:expect([[
- 1 {12:MMM} |
- {12:K} |
- {12:LLL} Y Z |
- 7 8 9 |
- |
- {11:[No Name] [+] }|
- |1| 1 {12:MMM} |
- |2|{12: K} |
- |3|{12: LLL} Y Z |
- |
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {10:[Preview] }|
- :%s/2\_.*X/MMM\rK\rLLL^ |
- ]])
- end)
-
- it(", inccomand=nosplit, highlights multiline substitutions", function()
- common_setup(screen, "nosplit", multiline_text)
- feed("gg")
-
- feed(":%s/2\\_.*X/MMM")
- screen:expect([[
- 1 {12:MMM} Y Z |
- 7 8 9 |
- |
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- :%s/2\_.*X/MMM^ |
- ]])
-
- feed("\\rK\\rLLL")
- screen:expect([[
- 1 {12:MMM} |
- {12:K} |
- {12:LLL} Y Z |
- 7 8 9 |
- |
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- :%s/2\_.*X/MMM\rK\rLLL^ |
- ]])
- end)
-
- it(", inccomand=split, highlights multiple matches on a line", function()
- common_setup(screen, "split", multimatch_text)
- command("set gdefault")
- feed("gg")
-
- feed(":%s/a/XLK")
- screen:expect([[
- {12:XLK} bdc e{12:XLK}e {12:XLK} fgl lzi{12:XLK} r|
- x |
- |
- {15:~ }|
- {15:~ }|
- {11:[No Name] [+] }|
- |1| {12:XLK} bdc e{12:XLK}e {12:XLK} fgl lzi{12:X}|
- {12:LK} r |
- |
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {10:[Preview] }|
- :%s/a/XLK^ |
- ]])
- end)
-
- it(", inccomand=nosplit, highlights multiple matches on a line", function()
- common_setup(screen, "nosplit", multimatch_text)
- command("set gdefault")
- feed("gg")
-
- feed(":%s/a/XLK")
- screen:expect([[
- {12:XLK} bdc e{12:XLK}e {12:XLK} fgl lzi{12:XLK} r|
- x |
- |
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- :%s/a/XLK^ |
- ]])
- end)
-
- it(", inccomand=split, with \\zs", function()
- common_setup(screen, "split", multiline_text)
- feed("gg")
-
- feed(":%s/[0-9]\\n\\zs[A-Z]/OKO")
- screen:expect([[
- 1 2 3 |
- {12:OKO} B C |
- 4 5 6 |
- {12:OKO} Y Z |
- 7 8 9 |
- {11:[No Name] [+] }|
- |1| 1 2 3 |
- |2| {12:OKO} B C |
- |3| 4 5 6 |
- |4| {12:OKO} Y Z |
- |
- {15:~ }|
- {15:~ }|
- {10:[Preview] }|
- :%s/[0-9]\n\zs[A-Z]/OKO^ |
- ]])
- end)
-
- it(", inccomand=nosplit, with \\zs", function()
- common_setup(screen, "nosplit", multiline_text)
- feed("gg")
-
- feed(":%s/[0-9]\\n\\zs[A-Z]/OKO")
- screen:expect([[
- 1 2 3 |
- {12:OKO} B C |
- 4 5 6 |
- {12:OKO} Y Z |
- 7 8 9 |
- |
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- :%s/[0-9]\n\zs[A-Z]/OKO^ |
- ]])
- end)
-
- it(", inccomand=split, substitutions of different length",
- function()
- common_setup(screen, "split", "T T123 T2T TTT T090804\nx")
-
- feed(":%s/T\\([0-9]\\+\\)/\\1\\1/g")
- screen:expect([[
- T {12:123123} {12:22}T TTT {12:090804090804} |
- x |
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {11:[No Name] [+] }|
- |1| T {12:123123} {12:22}T TTT {12:090804090}|
- {12:804} |
- |
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {10:[Preview] }|
- :%s/T\([0-9]\+\)/\1\1/g^ |
- ]])
- end)
-
- it(", inccomand=nosplit, substitutions of different length", function()
- common_setup(screen, "nosplit", "T T123 T2T TTT T090804\nx")
-
- feed(":%s/T\\([0-9]\\+\\)/\\1\\1/g")
- screen:expect([[
- T {12:123123} {12:22}T TTT {12:090804090804} |
- x |
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- :%s/T\([0-9]\+\)/\1\1/g^ |
- ]])
- end)
-
- it(", inccomand=split, contraction of lines", function()
- local text = [[
- T T123 T T123 T2T TT T23423424
- x
- afa Q
- adf la;lkd R
- alx
- ]]
-
- common_setup(screen, "split", text)
- feed(":%s/[QR]\\n")
- screen:expect([[
- afa Q |
- adf la;lkd R |
- alx |
- |
- {15:~ }|
- {11:[No Name] [+] }|
- |3| afa Q |
- |4| adf la;lkd R |
- |5| alx |
- |
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {10:[Preview] }|
- :%s/[QR]\n^ |
- ]])
-
- feed("/KKK")
- screen:expect([[
- x |
- afa {12:KKK}adf la;lkd {12:KKK}alx |
- |
- {15:~ }|
- {15:~ }|
- {11:[No Name] [+] }|
- |3| afa {12:KKK}adf la;lkd {12:KKK}alx |
- |
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {10:[Preview] }|
- :%s/[QR]\n/KKK^ |
- ]])
- end)
-
- it(", inccomand=nosplit, contraction of lines", function()
- local text = [[
- T T123 T T123 T2T TT T23423424
- x
- afa Q
- adf la;lkd R
- alx
- ]]
-
- common_setup(screen, "nosplit", text)
- feed(":%s/[QR]\\n/KKK")
- screen:expect([[
- T T123 T T123 T2T TT T23423424|
- x |
- afa {12:KKK}adf la;lkd {12:KKK}alx |
- |
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- :%s/[QR]\n/KKK^ |
- ]])
- end)
-
- it(", inccommand=split, multibyte text", function()
- common_setup(screen, "split", multibyte_text)
- feed(":%s/£.*ѫ/X¥¥")
- screen:expect([[
- {12:X¥¥} |
- a{12:X¥¥}¥KOL |
- £ ¥ libm |
- £ ¥ |
- |
- {11:[No Name] [+] }|
- |1| {12:X¥¥} PEPPERS |
- |2| {12:X¥¥} |
- |3| a{12:X¥¥}¥KOL |
- |
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {10:[Preview] }|
- :%s/£.*ѫ/X¥¥^ |
- ]])
-
- feed("\\ra££ ¥")
- screen:expect([[
- {12:a££ ¥} |
- a{12:X¥¥} |
- {12:a££ ¥}¥KOL |
- £ ¥ libm |
- £ ¥ |
- {11:[No Name] [+] }|
- |1| {12:X¥¥} |
- |2|{12: a££ ¥} PEPPERS |
- |3| {12:X¥¥} |
- |4|{12: a££ ¥} |
- |5| a{12:X¥¥} |
- |6|{12: a££ ¥}¥KOL |
- |
- {10:[Preview] }|
- :%s/£.*ѫ/X¥¥\ra££ ¥^ |
- ]])
- end)
-
- it(", inccommand=nosplit, multibyte text", function()
- common_setup(screen, "nosplit", multibyte_text)
- feed(":%s/£.*ѫ/X¥¥")
- screen:expect([[
- {12:X¥¥} PEPPERS |
- {12:X¥¥} |
- a{12:X¥¥}¥KOL |
- £ ¥ libm |
- £ ¥ |
- |
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- :%s/£.*ѫ/X¥¥^ |
- ]])
-
- feed("\\ra££ ¥")
- screen:expect([[
- {12:X¥¥} |
- {12:a££ ¥} PEPPERS |
- {12:X¥¥} |
- {12:a££ ¥} |
- a{12:X¥¥} |
- {12:a££ ¥}¥KOL |
- £ ¥ libm |
- £ ¥ |
- |
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- :%s/£.*ѫ/X¥¥\ra££ ¥^ |
- ]])
- end)
-
- it(", inccomand=split, small cmdwinheight", function()
- common_setup(screen, "split", long_multiline_text)
- command("set cmdwinheight=2")
-
- feed(":%s/[a-z]")
- screen:expect([[
- X Y Z |
- 7 8 9 |
- K L M |
- a b c |
- d e f |
- q r s |
- x y z |
- £ m n |
- t œ ¥ |
- |
- {11:[No Name] [+] }|
- | 7| a b c |
- | 8| d e f |
- {10:[Preview] }|
- :%s/[a-z]^ |
- ]])
-
- feed("/JLKR £")
- screen:expect([[
- X Y Z |
- 7 8 9 |
- K L M |
- {12:JLKR £} b c |
- {12:JLKR £} e f |
- {12:JLKR £} r s |
- {12:JLKR £} y z |
- £ {12:JLKR £} n |
- {12:JLKR £} œ ¥ |
- |
- {11:[No Name] [+] }|
- | 7| {12:JLKR £} b c |
- | 8| {12:JLKR £} e f |
- {10:[Preview] }|
- :%s/[a-z]/JLKR £^ |
- ]])
-
- feed("\\rѫ ab \\rXXXX")
- screen:expect([[
- 7 8 9 |
- K L M |
- {12:JLKR £} |
- {12:ѫ ab } |
- {12:XXXX} b c |
- {12:JLKR £} |
- {12:ѫ ab } |
- {12:XXXX} e f |
- {12:JLKR £} |
- {11:[No Name] [+] }|
- | 7| {12:JLKR £} |
- | 8|{12: ѫ ab } |
- {10:[Preview] }|
- :%s/[a-z]/JLKR £\rѫ ab \rXXX|
- X^ |
- ]])
- end)
-
- it(", inccomand=split, large cmdwinheight", function()
- common_setup(screen, "split", long_multiline_text)
- command("set cmdwinheight=11")
-
- feed(":%s/. .$")
- screen:expect([[
- t œ ¥ |
- {11:[No Name] [+] }|
- | 1| 1 2 3 |
- | 2| A B C |
- | 3| 4 5 6 |
- | 4| X Y Z |
- | 5| 7 8 9 |
- | 6| K L M |
- | 7| a b c |
- | 8| d e f |
- | 9| q r s |
- |10| x y z |
- |11| £ m n |
- {10:[Preview] }|
- :%s/. .$^ |
- ]])
-
- feed("/ YYY")
- screen:expect([[
- t {12: YYY} |
- {11:[No Name] [+] }|
- | 1| 1 {12: YYY} |
- | 2| A {12: YYY} |
- | 3| 4 {12: YYY} |
- | 4| X {12: YYY} |
- | 5| 7 {12: YYY} |
- | 6| K {12: YYY} |
- | 7| a {12: YYY} |
- | 8| d {12: YYY} |
- | 9| q {12: YYY} |
- |10| x {12: YYY} |
- |11| £ {12: YYY} |
- {10:[Preview] }|
- :%s/. .$/ YYY^ |
- ]])
-
- feed("\\r KKK")
- screen:expect([[
- a {12: YYY} |
- {11:[No Name] [+] }|
- | 1| 1 {12: YYY} |
- | 2|{12: KKK} |
- | 3| A {12: YYY} |
- | 4|{12: KKK} |
- | 5| 4 {12: YYY} |
- | 6|{12: KKK} |
- | 7| X {12: YYY} |
- | 8|{12: KKK} |
- | 9| 7 {12: YYY} |
- |10|{12: KKK} |
- |11| K {12: YYY} |
- {10:[Preview] }|
- :%s/. .$/ YYY\r KKK^ |
- ]])
- end)
-
- it(", inccomand=split, lookaround", function()
- common_setup(screen, "split", "something\neverything\nsomeone")
- feed([[:%s/\(some\)\@<lt>=thing/one/]])
- screen:expect([[
- some{12:one} |
- everything |
- someone |
- {15:~ }|
- {15:~ }|
- {11:[No Name] [+] }|
- |1| some{12:one} |
- |
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {10:[Preview] }|
- :%s/\(some\)\@<=thing/one/^ |
- ]])
- feed("<C-c>")
-
- feed([[:%s/\(some\)\@<lt>!thing/one/]])
- screen:expect([[
- something |
- every{12:one} |
- someone |
- {15:~ }|
- {15:~ }|
- {11:[No Name] [+] }|
- |2| every{12:one} |
- |
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {10:[Preview] }|
- :%s/\(some\)\@<!thing/one/^ |
- ]])
- feed([[<C-c>]])
-
- feed([[:%s/some\(thing\)\@=/every/]])
- screen:expect([[
- {12:every}thing |
- everything |
- someone |
- {15:~ }|
- {15:~ }|
- {11:[No Name] [+] }|
- |1| {12:every}thing |
- |
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {10:[Preview] }|
- :%s/some\(thing\)\@=/every/^ |
- ]])
- feed([[<C-c>]])
-
- feed([[:%s/some\(thing\)\@!/every/]])
- screen:expect([[
- everything |
- {12:every}one |
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {11:[No Name] [+] }|
- |3| {12:every}one |
- |
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {15:~ }|
- {10:[Preview] }|
- :%s/some\(thing\)\@!/every/^ |
- ]])
- end)
-end)
diff --git a/test/functional/ui/inccommand_spec.lua b/test/functional/ui/inccommand_spec.lua
index e22105b804..25466974a9 100644
--- a/test/functional/ui/inccommand_spec.lua
+++ b/test/functional/ui/inccommand_spec.lua
@@ -21,6 +21,42 @@ local default_text = [[
two lines
]]
+local multiline_text = [[
+ 1 2 3
+ A B C
+ 4 5 6
+ X Y Z
+ 7 8 9
+]]
+
+local multimatch_text = [[
+ a bdc eae a fgl lzia r
+ x
+]]
+
+local multibyte_text = [[
+ £ ¥ ѫѫ PEPPERS
+£ ¥ ѫfѫ
+ a£ ѫ¥KOL
+£ ¥ libm
+£ ¥
+]]
+
+local long_multiline_text = [[
+ 1 2 3
+ A B C
+ 4 5 6
+ X Y Z
+ 7 8 9
+ K L M
+ a b c
+ d e f
+ q r s
+ x y z
+ £ m n
+ t œ ¥
+]]
+
local function common_setup(screen, inccommand, text)
if screen then
command("syntax on")
@@ -1142,7 +1178,6 @@ describe("inccommand=nosplit", function()
:%smagic/3.*/X^ |
]])
-
feed([[<C-\><C-N>]]) -- cancel
feed(":%snomagic/3.*/X") -- start :snomagic command
screen:expect([[
@@ -1178,6 +1213,28 @@ describe("inccommand=nosplit", function()
feed('<Esc>')
end)
+ it("does not show window after toggling :set inccomand", function()
+ feed(":%s/tw/OKOK")
+ feed("<Esc>")
+ command("set icm=split")
+ feed(":%s/tw/OKOK")
+ feed("<Esc>")
+ command("set icm=nosplit")
+ feed(":%s/tw/OKOK")
+ screen:expect([[
+ Inc substitution on |
+ {12:OKOK}o lines |
+ Inc substitution on |
+ {12:OKOK}o lines |
+ |
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ :%s/tw/OKOK^ |
+ ]])
+ end)
+
it('never shows preview buffer', function()
feed_command("set hlsearch")
@@ -1712,3 +1769,609 @@ describe("'inccommand' with 'gdefault'", function()
eq({mode='n', blocking=false}, nvim("get_mode"))
end)
end)
+
+describe(":substitute", function()
+ local screen = Screen.new(30,15)
+
+ before_each(function()
+ clear()
+ end)
+
+ it(", inccomand=split, highlights multiline substitutions", function()
+ common_setup(screen, "split", multiline_text)
+ feed("gg")
+
+ feed(":%s/2\\_.*X/MMM")
+ screen:expect([[
+ 1 {12:MMM} Y Z |
+ 7 8 9 |
+ |
+ {15:~ }|
+ {15:~ }|
+ {11:[No Name] [+] }|
+ |1| 1 {12:MMM} Y Z |
+ |
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {10:[Preview] }|
+ :%s/2\_.*X/MMM^ |
+ ]])
+
+ feed("\\rK\\rLLL")
+ screen:expect([[
+ 1 {12:MMM} |
+ {12:K} |
+ {12:LLL} Y Z |
+ 7 8 9 |
+ |
+ {11:[No Name] [+] }|
+ |1| 1 {12:MMM} |
+ |2|{12: K} |
+ |3|{12: LLL} Y Z |
+ |
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {10:[Preview] }|
+ :%s/2\_.*X/MMM\rK\rLLL^ |
+ ]])
+ end)
+
+ it(", inccomand=nosplit, highlights multiline substitutions", function()
+ common_setup(screen, "nosplit", multiline_text)
+ feed("gg")
+
+ feed(":%s/2\\_.*X/MMM")
+ screen:expect([[
+ 1 {12:MMM} Y Z |
+ 7 8 9 |
+ |
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ :%s/2\_.*X/MMM^ |
+ ]])
+
+ feed("\\rK\\rLLL")
+ screen:expect([[
+ 1 {12:MMM} |
+ {12:K} |
+ {12:LLL} Y Z |
+ 7 8 9 |
+ |
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ :%s/2\_.*X/MMM\rK\rLLL^ |
+ ]])
+ end)
+
+ it(", inccomand=split, highlights multiple matches on a line", function()
+ common_setup(screen, "split", multimatch_text)
+ command("set gdefault")
+ feed("gg")
+
+ feed(":%s/a/XLK")
+ screen:expect([[
+ {12:XLK} bdc e{12:XLK}e {12:XLK} fgl lzi{12:XLK} r|
+ x |
+ |
+ {15:~ }|
+ {15:~ }|
+ {11:[No Name] [+] }|
+ |1| {12:XLK} bdc e{12:XLK}e {12:XLK} fgl lzi{12:X}|
+ {12:LK} r |
+ |
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {10:[Preview] }|
+ :%s/a/XLK^ |
+ ]])
+ end)
+
+ it(", inccomand=nosplit, highlights multiple matches on a line", function()
+ common_setup(screen, "nosplit", multimatch_text)
+ command("set gdefault")
+ feed("gg")
+
+ feed(":%s/a/XLK")
+ screen:expect([[
+ {12:XLK} bdc e{12:XLK}e {12:XLK} fgl lzi{12:XLK} r|
+ x |
+ |
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ :%s/a/XLK^ |
+ ]])
+ end)
+
+ it(", inccomand=split, with \\zs", function()
+ common_setup(screen, "split", multiline_text)
+ feed("gg")
+
+ feed(":%s/[0-9]\\n\\zs[A-Z]/OKO")
+ screen:expect([[
+ 1 2 3 |
+ {12:OKO} B C |
+ 4 5 6 |
+ {12:OKO} Y Z |
+ 7 8 9 |
+ {11:[No Name] [+] }|
+ |1| 1 2 3 |
+ |2| {12:OKO} B C |
+ |3| 4 5 6 |
+ |4| {12:OKO} Y Z |
+ |
+ {15:~ }|
+ {15:~ }|
+ {10:[Preview] }|
+ :%s/[0-9]\n\zs[A-Z]/OKO^ |
+ ]])
+ end)
+
+ it(", inccomand=nosplit, with \\zs", function()
+ common_setup(screen, "nosplit", multiline_text)
+ feed("gg")
+
+ feed(":%s/[0-9]\\n\\zs[A-Z]/OKO")
+ screen:expect([[
+ 1 2 3 |
+ {12:OKO} B C |
+ 4 5 6 |
+ {12:OKO} Y Z |
+ 7 8 9 |
+ |
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ :%s/[0-9]\n\zs[A-Z]/OKO^ |
+ ]])
+ end)
+
+ it(", inccomand=split, substitutions of different length",
+ function()
+ common_setup(screen, "split", "T T123 T2T TTT T090804\nx")
+
+ feed(":%s/T\\([0-9]\\+\\)/\\1\\1/g")
+ screen:expect([[
+ T {12:123123} {12:22}T TTT {12:090804090804} |
+ x |
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {11:[No Name] [+] }|
+ |1| T {12:123123} {12:22}T TTT {12:090804090}|
+ {12:804} |
+ |
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {10:[Preview] }|
+ :%s/T\([0-9]\+\)/\1\1/g^ |
+ ]])
+ end)
+
+ it(", inccomand=nosplit, substitutions of different length", function()
+ common_setup(screen, "nosplit", "T T123 T2T TTT T090804\nx")
+
+ feed(":%s/T\\([0-9]\\+\\)/\\1\\1/g")
+ screen:expect([[
+ T {12:123123} {12:22}T TTT {12:090804090804} |
+ x |
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ :%s/T\([0-9]\+\)/\1\1/g^ |
+ ]])
+ end)
+
+ it(", inccomand=split, contraction of lines", function()
+ local text = [[
+ T T123 T T123 T2T TT T23423424
+ x
+ afa Q
+ adf la;lkd R
+ alx
+ ]]
+
+ common_setup(screen, "split", text)
+ feed(":%s/[QR]\\n")
+ screen:expect([[
+ afa Q |
+ adf la;lkd R |
+ alx |
+ |
+ {15:~ }|
+ {11:[No Name] [+] }|
+ |3| afa Q |
+ |4| adf la;lkd R |
+ |5| alx |
+ |
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {10:[Preview] }|
+ :%s/[QR]\n^ |
+ ]])
+
+ feed("/KKK")
+ screen:expect([[
+ x |
+ afa {12:KKK}adf la;lkd {12:KKK}alx |
+ |
+ {15:~ }|
+ {15:~ }|
+ {11:[No Name] [+] }|
+ |3| afa {12:KKK}adf la;lkd {12:KKK}alx |
+ |
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {10:[Preview] }|
+ :%s/[QR]\n/KKK^ |
+ ]])
+ end)
+
+ it(", inccomand=nosplit, contraction of lines", function()
+ local text = [[
+ T T123 T T123 T2T TT T23423424
+ x
+ afa Q
+ adf la;lkd R
+ alx
+ ]]
+
+ common_setup(screen, "nosplit", text)
+ feed(":%s/[QR]\\n/KKK")
+ screen:expect([[
+ T T123 T T123 T2T TT T23423424|
+ x |
+ afa {12:KKK}adf la;lkd {12:KKK}alx |
+ |
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ :%s/[QR]\n/KKK^ |
+ ]])
+ end)
+
+ it(", inccommand=split, multibyte text", function()
+ common_setup(screen, "split", multibyte_text)
+ feed(":%s/£.*ѫ/X¥¥")
+ screen:expect([[
+ {12:X¥¥} |
+ a{12:X¥¥}¥KOL |
+ £ ¥ libm |
+ £ ¥ |
+ |
+ {11:[No Name] [+] }|
+ |1| {12:X¥¥} PEPPERS |
+ |2| {12:X¥¥} |
+ |3| a{12:X¥¥}¥KOL |
+ |
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {10:[Preview] }|
+ :%s/£.*ѫ/X¥¥^ |
+ ]])
+
+ feed("\\ra££ ¥")
+ screen:expect([[
+ {12:a££ ¥} |
+ a{12:X¥¥} |
+ {12:a££ ¥}¥KOL |
+ £ ¥ libm |
+ £ ¥ |
+ {11:[No Name] [+] }|
+ |1| {12:X¥¥} |
+ |2|{12: a££ ¥} PEPPERS |
+ |3| {12:X¥¥} |
+ |4|{12: a££ ¥} |
+ |5| a{12:X¥¥} |
+ |6|{12: a££ ¥}¥KOL |
+ |
+ {10:[Preview] }|
+ :%s/£.*ѫ/X¥¥\ra££ ¥^ |
+ ]])
+ end)
+
+ it(", inccommand=nosplit, multibyte text", function()
+ common_setup(screen, "nosplit", multibyte_text)
+ feed(":%s/£.*ѫ/X¥¥")
+ screen:expect([[
+ {12:X¥¥} PEPPERS |
+ {12:X¥¥} |
+ a{12:X¥¥}¥KOL |
+ £ ¥ libm |
+ £ ¥ |
+ |
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ :%s/£.*ѫ/X¥¥^ |
+ ]])
+
+ feed("\\ra££ ¥")
+ screen:expect([[
+ {12:X¥¥} |
+ {12:a££ ¥} PEPPERS |
+ {12:X¥¥} |
+ {12:a££ ¥} |
+ a{12:X¥¥} |
+ {12:a££ ¥}¥KOL |
+ £ ¥ libm |
+ £ ¥ |
+ |
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ :%s/£.*ѫ/X¥¥\ra££ ¥^ |
+ ]])
+ end)
+
+ it(", inccomand=split, small cmdwinheight", function()
+ common_setup(screen, "split", long_multiline_text)
+ command("set cmdwinheight=2")
+
+ feed(":%s/[a-z]")
+ screen:expect([[
+ X Y Z |
+ 7 8 9 |
+ K L M |
+ a b c |
+ d e f |
+ q r s |
+ x y z |
+ £ m n |
+ t œ ¥ |
+ |
+ {11:[No Name] [+] }|
+ | 7| a b c |
+ | 8| d e f |
+ {10:[Preview] }|
+ :%s/[a-z]^ |
+ ]])
+
+ feed("/JLKR £")
+ screen:expect([[
+ X Y Z |
+ 7 8 9 |
+ K L M |
+ {12:JLKR £} b c |
+ {12:JLKR £} e f |
+ {12:JLKR £} r s |
+ {12:JLKR £} y z |
+ £ {12:JLKR £} n |
+ {12:JLKR £} œ ¥ |
+ |
+ {11:[No Name] [+] }|
+ | 7| {12:JLKR £} b c |
+ | 8| {12:JLKR £} e f |
+ {10:[Preview] }|
+ :%s/[a-z]/JLKR £^ |
+ ]])
+
+ feed("\\rѫ ab \\rXXXX")
+ screen:expect([[
+ 7 8 9 |
+ K L M |
+ {12:JLKR £} |
+ {12:ѫ ab } |
+ {12:XXXX} b c |
+ {12:JLKR £} |
+ {12:ѫ ab } |
+ {12:XXXX} e f |
+ {12:JLKR £} |
+ {11:[No Name] [+] }|
+ | 7| {12:JLKR £} |
+ | 8|{12: ѫ ab } |
+ {10:[Preview] }|
+ :%s/[a-z]/JLKR £\rѫ ab \rXXX|
+ X^ |
+ ]])
+ end)
+
+ it(", inccomand=split, large cmdwinheight", function()
+ common_setup(screen, "split", long_multiline_text)
+ command("set cmdwinheight=11")
+
+ feed(":%s/. .$")
+ screen:expect([[
+ t œ ¥ |
+ {11:[No Name] [+] }|
+ | 1| 1 2 3 |
+ | 2| A B C |
+ | 3| 4 5 6 |
+ | 4| X Y Z |
+ | 5| 7 8 9 |
+ | 6| K L M |
+ | 7| a b c |
+ | 8| d e f |
+ | 9| q r s |
+ |10| x y z |
+ |11| £ m n |
+ {10:[Preview] }|
+ :%s/. .$^ |
+ ]])
+
+ feed("/ YYY")
+ screen:expect([[
+ t {12: YYY} |
+ {11:[No Name] [+] }|
+ | 1| 1 {12: YYY} |
+ | 2| A {12: YYY} |
+ | 3| 4 {12: YYY} |
+ | 4| X {12: YYY} |
+ | 5| 7 {12: YYY} |
+ | 6| K {12: YYY} |
+ | 7| a {12: YYY} |
+ | 8| d {12: YYY} |
+ | 9| q {12: YYY} |
+ |10| x {12: YYY} |
+ |11| £ {12: YYY} |
+ {10:[Preview] }|
+ :%s/. .$/ YYY^ |
+ ]])
+
+ feed("\\r KKK")
+ screen:expect([[
+ a {12: YYY} |
+ {11:[No Name] [+] }|
+ | 1| 1 {12: YYY} |
+ | 2|{12: KKK} |
+ | 3| A {12: YYY} |
+ | 4|{12: KKK} |
+ | 5| 4 {12: YYY} |
+ | 6|{12: KKK} |
+ | 7| X {12: YYY} |
+ | 8|{12: KKK} |
+ | 9| 7 {12: YYY} |
+ |10|{12: KKK} |
+ |11| K {12: YYY} |
+ {10:[Preview] }|
+ :%s/. .$/ YYY\r KKK^ |
+ ]])
+ end)
+
+ it(", inccomand=split, lookaround", function()
+ common_setup(screen, "split", "something\neverything\nsomeone")
+ feed([[:%s/\(some\)\@<lt>=thing/one/]])
+ screen:expect([[
+ some{12:one} |
+ everything |
+ someone |
+ {15:~ }|
+ {15:~ }|
+ {11:[No Name] [+] }|
+ |1| some{12:one} |
+ |
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {10:[Preview] }|
+ :%s/\(some\)\@<=thing/one/^ |
+ ]])
+ feed("<C-c>")
+
+ feed([[:%s/\(some\)\@<lt>!thing/one/]])
+ screen:expect([[
+ something |
+ every{12:one} |
+ someone |
+ {15:~ }|
+ {15:~ }|
+ {11:[No Name] [+] }|
+ |2| every{12:one} |
+ |
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {10:[Preview] }|
+ :%s/\(some\)\@<!thing/one/^ |
+ ]])
+ feed([[<C-c>]])
+
+ feed([[:%s/some\(thing\)\@=/every/]])
+ screen:expect([[
+ {12:every}thing |
+ everything |
+ someone |
+ {15:~ }|
+ {15:~ }|
+ {11:[No Name] [+] }|
+ |1| {12:every}thing |
+ |
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {10:[Preview] }|
+ :%s/some\(thing\)\@=/every/^ |
+ ]])
+ feed([[<C-c>]])
+
+ feed([[:%s/some\(thing\)\@!/every/]])
+ screen:expect([[
+ everything |
+ {12:every}one |
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {11:[No Name] [+] }|
+ |3| {12:every}one |
+ |
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {15:~ }|
+ {10:[Preview] }|
+ :%s/some\(thing\)\@!/every/^ |
+ ]])
+ end)
+end)