diff options
-rw-r--r-- | test/functional/ui/icmmulti_spec.lua | 692 | ||||
-rw-r--r-- | test/functional/ui/inccommand_spec.lua | 665 |
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) |