mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-02-02 22:40:06 +08:00
773 lines
21 KiB
Lua
773 lines
21 KiB
Lua
|
local esc = vim.api.nvim_replace_termcodes("<Esc>", true, false, true)
|
|||
|
local ctrl_c = vim.api.nvim_replace_termcodes("<C-c>", true, false, true)
|
|||
|
local ctrl_v = vim.api.nvim_replace_termcodes("<C-v>", true, false, true)
|
|||
|
local set_curpos = function(pos)
|
|||
|
vim.api.nvim_win_set_cursor(0, { pos[1], pos[2] - 1 })
|
|||
|
end
|
|||
|
local set_lines = function(lines)
|
|||
|
vim.api.nvim_buf_set_lines(0, 0, -1, false, lines)
|
|||
|
end
|
|||
|
local check_lines = function(lines)
|
|||
|
assert.are.same(lines, vim.api.nvim_buf_get_lines(0, 0, -1, false))
|
|||
|
end
|
|||
|
|
|||
|
describe("nvim-surround", function()
|
|||
|
before_each(function()
|
|||
|
local bufnr = vim.api.nvim_create_buf(true, true)
|
|||
|
vim.api.nvim_win_set_buf(0, bufnr)
|
|||
|
end)
|
|||
|
|
|||
|
it("can surround text-objects (ys, yss)", function()
|
|||
|
set_lines({ "local str = test" })
|
|||
|
set_curpos({ 1, 13 })
|
|||
|
vim.cmd('normal ysiw"')
|
|||
|
check_lines({ 'local str = "test"' })
|
|||
|
vim.cmd('normal ysa"b')
|
|||
|
check_lines({ 'local str = ("test")' })
|
|||
|
|
|||
|
set_lines({ "string x = some text" })
|
|||
|
set_curpos({ 1, 12 })
|
|||
|
vim.cmd('normal ys$"')
|
|||
|
check_lines({ 'string x = "some text"' })
|
|||
|
|
|||
|
set_lines({
|
|||
|
"this is a",
|
|||
|
"part of a paragraph",
|
|||
|
"with multiple lines",
|
|||
|
})
|
|||
|
set_curpos({ 2, 8 })
|
|||
|
vim.cmd("normal ysipB")
|
|||
|
check_lines({
|
|||
|
"{this is a",
|
|||
|
"part of a paragraph",
|
|||
|
"with multiple lines}",
|
|||
|
})
|
|||
|
|
|||
|
set_lines({ "hello world" })
|
|||
|
vim.cmd("normal yssb")
|
|||
|
check_lines({ "(hello world)" })
|
|||
|
|
|||
|
set_curpos({ 1, 5 })
|
|||
|
set_lines({ "this is the first line", "followed by the second line", "and finally the third" })
|
|||
|
vim.cmd("normal 2yssB")
|
|||
|
set_lines({ "{this is the first line", "followed by the second line}", "and finally the third" })
|
|||
|
end)
|
|||
|
|
|||
|
it("can surround text-objects (yS, ySS)", function()
|
|||
|
set_lines({ "local str = test" })
|
|||
|
set_curpos({ 1, 13 })
|
|||
|
vim.cmd("normal yS2br")
|
|||
|
check_lines({ "local [", "str =", "] test" })
|
|||
|
set_curpos({ 1, 1 })
|
|||
|
vim.cmd("normal ySa]B")
|
|||
|
check_lines({ "local {", "[", "str =", "]", "} test" })
|
|||
|
|
|||
|
set_lines({
|
|||
|
"this is a",
|
|||
|
"part of a paragraph",
|
|||
|
"with multiple lines",
|
|||
|
})
|
|||
|
set_curpos({ 2, 8 })
|
|||
|
vim.cmd("normal ySipB")
|
|||
|
check_lines({
|
|||
|
"{",
|
|||
|
"this is a",
|
|||
|
"part of a paragraph",
|
|||
|
"with multiple lines",
|
|||
|
"}",
|
|||
|
})
|
|||
|
|
|||
|
set_lines({ "current line" })
|
|||
|
set_curpos({ 1, 7 })
|
|||
|
vim.cmd("normal ySSr")
|
|||
|
check_lines({ "[", "current line", "]" })
|
|||
|
|
|||
|
set_lines({ "here", "we", "have", "several", "lines" })
|
|||
|
set_curpos({ 2, 2 })
|
|||
|
vim.cmd("normal 3ySS`")
|
|||
|
check_lines({ "here", "`", "we", "have", "several", "`", "lines" })
|
|||
|
end)
|
|||
|
|
|||
|
it("can surround empty lines", function()
|
|||
|
set_lines({ "" })
|
|||
|
vim.cmd("normal ysla")
|
|||
|
check_lines({ "<>" })
|
|||
|
|
|||
|
set_lines({ "" })
|
|||
|
set_curpos({ 1, 1 })
|
|||
|
vim.cmd("normal ySla")
|
|||
|
check_lines({ "<", "", ">" })
|
|||
|
|
|||
|
set_lines({ "" })
|
|||
|
set_curpos({ 1, 1 })
|
|||
|
vim.cmd("normal vSb")
|
|||
|
check_lines({ "()" })
|
|||
|
|
|||
|
set_lines({ "" })
|
|||
|
set_curpos({ 1, 1 })
|
|||
|
vim.cmd("normal vgSB")
|
|||
|
check_lines({ "{", "", "}" })
|
|||
|
|
|||
|
set_lines({ "" })
|
|||
|
set_curpos({ 1, 1 })
|
|||
|
vim.cmd("normal VSr")
|
|||
|
check_lines({ "[", "", "]" })
|
|||
|
|
|||
|
set_lines({ "" })
|
|||
|
set_curpos({ 1, 1 })
|
|||
|
vim.cmd("normal " .. ctrl_v .. "Sb")
|
|||
|
check_lines({ "()" })
|
|||
|
end)
|
|||
|
|
|||
|
it("properly handles whitespace for open/close pairs", function()
|
|||
|
set_lines({ "sample_text" })
|
|||
|
vim.cmd("normal ysiw}")
|
|||
|
check_lines({ "{sample_text}" })
|
|||
|
|
|||
|
set_lines({ "sample_text" })
|
|||
|
vim.cmd("normal ysiw{")
|
|||
|
check_lines({ "{ sample_text }" })
|
|||
|
|
|||
|
set_lines({ "({ sample_text })" })
|
|||
|
vim.cmd("normal ds{")
|
|||
|
check_lines({ "(sample_text)" })
|
|||
|
|
|||
|
set_lines({ "({sample_text})" })
|
|||
|
vim.cmd("normal ds{")
|
|||
|
check_lines({ "(sample_text)" })
|
|||
|
|
|||
|
set_lines({ "({sample_text })" })
|
|||
|
vim.cmd("normal ds{")
|
|||
|
check_lines({ "(sample_text)" })
|
|||
|
|
|||
|
set_lines({ "({ sample_text })" })
|
|||
|
vim.cmd("normal ds}")
|
|||
|
check_lines({ "( sample_text )" })
|
|||
|
vim.cmd("normal cs()")
|
|||
|
check_lines({ "(sample_text)" })
|
|||
|
end)
|
|||
|
|
|||
|
it("properly handles whitespace next to line boundaries", function()
|
|||
|
set_lines({ "sample_text" })
|
|||
|
vim.cmd("normal ySS{")
|
|||
|
check_lines({ "{", "sample_text", "}" })
|
|||
|
vim.cmd("normal cs}[")
|
|||
|
check_lines({ "[", "sample_text", "]" })
|
|||
|
|
|||
|
set_lines({ "(", " sample_text", ")" })
|
|||
|
vim.cmd("normal cs)<")
|
|||
|
check_lines({ "<", " sample_text", ">" })
|
|||
|
|
|||
|
set_lines({
|
|||
|
" <texta",
|
|||
|
" textb",
|
|||
|
" >",
|
|||
|
})
|
|||
|
vim.cmd("normal cs><")
|
|||
|
check_lines({
|
|||
|
" < texta",
|
|||
|
" textb",
|
|||
|
" >",
|
|||
|
})
|
|||
|
vim.cmd("normal cs>{")
|
|||
|
check_lines({
|
|||
|
" { texta",
|
|||
|
" textb",
|
|||
|
" }",
|
|||
|
})
|
|||
|
vim.cmd("normal cs{]")
|
|||
|
check_lines({
|
|||
|
" [ texta",
|
|||
|
" textb",
|
|||
|
" ]",
|
|||
|
})
|
|||
|
vim.cmd("normal cs[)")
|
|||
|
check_lines({
|
|||
|
" (texta",
|
|||
|
" textb",
|
|||
|
" )",
|
|||
|
})
|
|||
|
|
|||
|
set_lines({
|
|||
|
" {texta",
|
|||
|
" textb",
|
|||
|
" textc}",
|
|||
|
})
|
|||
|
vim.cmd("normal cs{{")
|
|||
|
check_lines({
|
|||
|
" { texta",
|
|||
|
" textb",
|
|||
|
" textc }",
|
|||
|
})
|
|||
|
vim.cmd("normal cs{{")
|
|||
|
check_lines({
|
|||
|
" { texta",
|
|||
|
" textb",
|
|||
|
" textc }",
|
|||
|
})
|
|||
|
vim.cmd("normal cs}{")
|
|||
|
check_lines({
|
|||
|
" { texta",
|
|||
|
" textb",
|
|||
|
" textc }",
|
|||
|
})
|
|||
|
vim.cmd("normal cs{}")
|
|||
|
check_lines({
|
|||
|
" { texta",
|
|||
|
" textb",
|
|||
|
" textc }",
|
|||
|
})
|
|||
|
vim.cmd("normal cs{}")
|
|||
|
check_lines({
|
|||
|
" {texta",
|
|||
|
" textb",
|
|||
|
" textc}",
|
|||
|
})
|
|||
|
end)
|
|||
|
|
|||
|
it("can surround charwise visual selections", function()
|
|||
|
set_lines({ "this is", "a full", "sentence" })
|
|||
|
set_curpos({ 1, 2 })
|
|||
|
vim.cmd("normal! v")
|
|||
|
set_curpos({ 3, 5 })
|
|||
|
vim.cmd("normal SB")
|
|||
|
check_lines({ "t{his is", "a full", "sente}nce" })
|
|||
|
set_curpos({ 3, 7 })
|
|||
|
vim.cmd("normal! v")
|
|||
|
set_curpos({ 2, 2 })
|
|||
|
vim.cmd("normal Sa")
|
|||
|
check_lines({ "t{his is", "a< full", "sente}n>ce" })
|
|||
|
|
|||
|
set_lines({ "this is", "a full", "sentence" })
|
|||
|
set_curpos({ 1, 1 })
|
|||
|
vim.cmd("normal! v")
|
|||
|
set_curpos({ 3, 8 })
|
|||
|
vim.cmd("normal gS'")
|
|||
|
check_lines({ "'", "this is", "a full", "sentence", "'" })
|
|||
|
end)
|
|||
|
|
|||
|
it("can surround linewise visual selections", function()
|
|||
|
set_lines({ "current line" })
|
|||
|
vim.cmd("normal VSB")
|
|||
|
check_lines({ "{", "current line", "}" })
|
|||
|
|
|||
|
set_lines({ "multiple", "lines" })
|
|||
|
set_curpos({ 2, 2 })
|
|||
|
vim.cmd("normal! V")
|
|||
|
set_curpos({ 1, 3 })
|
|||
|
vim.cmd("normal Sb")
|
|||
|
check_lines({ "(", "multiple", "lines", ")" })
|
|||
|
|
|||
|
set_curpos({ 1, 1 })
|
|||
|
set_lines({
|
|||
|
"'hello',",
|
|||
|
"'hello',",
|
|||
|
"'hello',",
|
|||
|
})
|
|||
|
vim.cmd("normal VSB")
|
|||
|
check_lines({
|
|||
|
"{",
|
|||
|
"'hello',",
|
|||
|
"}",
|
|||
|
"'hello',",
|
|||
|
"'hello',",
|
|||
|
})
|
|||
|
set_curpos({ 5, 1 })
|
|||
|
vim.cmd("normal VSB")
|
|||
|
check_lines({
|
|||
|
"{",
|
|||
|
"'hello',",
|
|||
|
"}",
|
|||
|
"'hello',",
|
|||
|
"{",
|
|||
|
"'hello',",
|
|||
|
"}",
|
|||
|
})
|
|||
|
vim.cmd("normal ggVGSb")
|
|||
|
check_lines({
|
|||
|
"(",
|
|||
|
"{",
|
|||
|
"'hello',",
|
|||
|
"}",
|
|||
|
"'hello',",
|
|||
|
"{",
|
|||
|
"'hello',",
|
|||
|
"}",
|
|||
|
")",
|
|||
|
})
|
|||
|
end)
|
|||
|
|
|||
|
it("can surround blockwise visual selections", function()
|
|||
|
set_lines({
|
|||
|
"there happen",
|
|||
|
"to be",
|
|||
|
"quite a few lines",
|
|||
|
"in this buffer",
|
|||
|
"or so I had thought",
|
|||
|
})
|
|||
|
vim.cmd("normal! " .. ctrl_v)
|
|||
|
set_curpos({ 5, 2 })
|
|||
|
vim.cmd("normal Sb")
|
|||
|
check_lines({ "(th)ere happen", "(to) be", "(qu)ite a few lines", "(in) this buffer", "(or) so I had thought" })
|
|||
|
set_curpos({ 5, 21 })
|
|||
|
vim.cmd("normal! " .. ctrl_v)
|
|||
|
set_curpos({ 1, 1 })
|
|||
|
vim.cmd("normal SB")
|
|||
|
check_lines({
|
|||
|
"{(th)ere happen}",
|
|||
|
"{(to) be}",
|
|||
|
"{(qu)ite a few lines}",
|
|||
|
"{(in) this buffer}",
|
|||
|
"{(or) so I had thought}",
|
|||
|
})
|
|||
|
set_curpos({ 4, 3 })
|
|||
|
vim.cmd("normal! " .. ctrl_v)
|
|||
|
set_curpos({ 3, 7 })
|
|||
|
vim.cmd("normal Sa")
|
|||
|
check_lines({
|
|||
|
"{(th)ere happen}",
|
|||
|
"{(to) be}",
|
|||
|
"{(<qu)it>e a few lines}",
|
|||
|
"{(<in) t>his buffer}",
|
|||
|
"{(or) so I had thought}",
|
|||
|
})
|
|||
|
set_curpos({ 1, 16 })
|
|||
|
vim.cmd("normal! " .. ctrl_v)
|
|||
|
set_curpos({ 3, 16 })
|
|||
|
vim.cmd("normal S'")
|
|||
|
check_lines({
|
|||
|
"{(th)ere happen'}'",
|
|||
|
"{(to) be}''",
|
|||
|
"{(<qu)it>e a fe'w' lines}",
|
|||
|
"{(<in) t>his buffer}",
|
|||
|
"{(or) so I had thought}",
|
|||
|
})
|
|||
|
|
|||
|
set_lines({ "hello world", "more text here" })
|
|||
|
set_curpos({ 1, 3 })
|
|||
|
vim.cmd("normal! " .. ctrl_v)
|
|||
|
set_curpos({ 2, 10 })
|
|||
|
vim.cmd("normal gSB")
|
|||
|
check_lines({
|
|||
|
"he{",
|
|||
|
"llo worl",
|
|||
|
"}d",
|
|||
|
"mo{",
|
|||
|
"re text ",
|
|||
|
"}here",
|
|||
|
})
|
|||
|
end)
|
|||
|
|
|||
|
it("can delete delimiter pairs", function()
|
|||
|
set_lines({
|
|||
|
"local func = function()",
|
|||
|
" local config = require('nvim-surround.config')",
|
|||
|
" local tab = {",
|
|||
|
" `weird stuff`,",
|
|||
|
" },",
|
|||
|
"end",
|
|||
|
})
|
|||
|
vim.cmd("normal dsb")
|
|||
|
check_lines({
|
|||
|
"local func = function",
|
|||
|
" local config = require('nvim-surround.config')",
|
|||
|
" local tab = {",
|
|||
|
" `weird stuff`,",
|
|||
|
" },",
|
|||
|
"end",
|
|||
|
})
|
|||
|
vim.cmd("normal dsf")
|
|||
|
check_lines({
|
|||
|
"local func = function",
|
|||
|
" local config = 'nvim-surround.config'",
|
|||
|
" local tab = {",
|
|||
|
" `weird stuff`,",
|
|||
|
" },",
|
|||
|
"end",
|
|||
|
})
|
|||
|
vim.cmd("normal dsB")
|
|||
|
check_lines({
|
|||
|
"local func = function",
|
|||
|
" local config = 'nvim-surround.config'",
|
|||
|
" local tab = ",
|
|||
|
" `weird stuff`,",
|
|||
|
" ,",
|
|||
|
"end",
|
|||
|
})
|
|||
|
|
|||
|
set_lines({ "()" })
|
|||
|
vim.cmd("normal dsb")
|
|||
|
check_lines({ "" })
|
|||
|
|
|||
|
set_lines({ "{", "", "}" })
|
|||
|
vim.cmd("normal dsB")
|
|||
|
check_lines({ "", "", "" })
|
|||
|
end)
|
|||
|
|
|||
|
it("can change delimiter pairs", function()
|
|||
|
set_lines({
|
|||
|
"require'nvim-surround'.setup(",
|
|||
|
"",
|
|||
|
")",
|
|||
|
})
|
|||
|
set_curpos({ 1, 8 })
|
|||
|
vim.cmd("normal ysa'b")
|
|||
|
set_curpos({ 1, 9 })
|
|||
|
vim.cmd([[normal cs'"]])
|
|||
|
set_curpos({ 2, 1 })
|
|||
|
vim.cmd("normal csbB")
|
|||
|
vim.cmd("normal ysaBb")
|
|||
|
check_lines({
|
|||
|
'require("nvim-surround").setup({',
|
|||
|
"",
|
|||
|
"})",
|
|||
|
})
|
|||
|
|
|||
|
set_lines({ "()" })
|
|||
|
vim.cmd("normal csba")
|
|||
|
check_lines({ "<>" })
|
|||
|
|
|||
|
set_lines({ "{", "", "}" })
|
|||
|
vim.cmd("normal csBr")
|
|||
|
check_lines({ "[", "", "]" })
|
|||
|
end)
|
|||
|
|
|||
|
it("can change delimiter pairs on new lines", function()
|
|||
|
set_lines({
|
|||
|
"require'nvim-surround'.setup(args)",
|
|||
|
})
|
|||
|
set_curpos({ 1, 29 })
|
|||
|
vim.cmd("normal cS))")
|
|||
|
check_lines({
|
|||
|
"require'nvim-surround'.setup(",
|
|||
|
"args",
|
|||
|
")",
|
|||
|
})
|
|||
|
set_curpos({ 2, 1 })
|
|||
|
vim.cmd([[normal ysab}]])
|
|||
|
set_curpos({ 1, 29 })
|
|||
|
vim.cmd("normal cS}]")
|
|||
|
check_lines({
|
|||
|
"require'nvim-surround'.setup[",
|
|||
|
"(",
|
|||
|
"args",
|
|||
|
")",
|
|||
|
"]",
|
|||
|
})
|
|||
|
vim.cmd("normal cS]{")
|
|||
|
check_lines({
|
|||
|
"require'nvim-surround'.setup{",
|
|||
|
"",
|
|||
|
"(",
|
|||
|
"args",
|
|||
|
")",
|
|||
|
"",
|
|||
|
"}",
|
|||
|
})
|
|||
|
|
|||
|
set_lines({ "()" })
|
|||
|
vim.cmd("normal cSbb")
|
|||
|
check_lines({ "(", "", ")" })
|
|||
|
|
|||
|
set_lines({ "{", "", "}" })
|
|||
|
vim.cmd("normal cSBB")
|
|||
|
check_lines({ "{", "", "", "", "}" })
|
|||
|
end)
|
|||
|
|
|||
|
it("can handle invalid key behavior", function()
|
|||
|
set_lines({ "sample text" })
|
|||
|
vim.cmd("normal yss|")
|
|||
|
check_lines({ "|sample text|" })
|
|||
|
vim.cmd("normal cs|^")
|
|||
|
check_lines({ "^sample text^" })
|
|||
|
vim.cmd("normal ds^")
|
|||
|
check_lines({ "sample text" })
|
|||
|
|
|||
|
set_lines({ "one|two|three|four|five" })
|
|||
|
set_curpos({ 1, 2 })
|
|||
|
vim.cmd("normal ds|")
|
|||
|
check_lines({ "onetwothree|four|five" })
|
|||
|
|
|||
|
set_lines({ "one|two|three|four|five" })
|
|||
|
set_curpos({ 1, 7 })
|
|||
|
vim.cmd("normal ds|")
|
|||
|
check_lines({ "onetwothree|four|five" })
|
|||
|
|
|||
|
set_lines({ "one|two|three|four|five" })
|
|||
|
set_curpos({ 1, 8 })
|
|||
|
vim.cmd("normal ds|")
|
|||
|
check_lines({ "one|twothreefour|five" })
|
|||
|
|
|||
|
set_lines({ "one|two|three|four|five" })
|
|||
|
set_curpos({ 1, 15 })
|
|||
|
vim.cmd("normal ds|")
|
|||
|
check_lines({ "one|two|threefourfive" })
|
|||
|
|
|||
|
set_lines({ "one|two|three|four|five" })
|
|||
|
set_curpos({ 1, 23 })
|
|||
|
vim.cmd("normal ds|")
|
|||
|
check_lines({ "one|two|threefourfive" })
|
|||
|
|
|||
|
set_lines({ "some |text|", "more |text|" })
|
|||
|
set_curpos({ 2, 2 })
|
|||
|
vim.cmd("normal ds|")
|
|||
|
check_lines({
|
|||
|
"some |text",
|
|||
|
"more text|",
|
|||
|
})
|
|||
|
end)
|
|||
|
|
|||
|
it("can handle multi-byte characters", function()
|
|||
|
set_lines({ "。。。。" })
|
|||
|
vim.cmd("normal ys3lb")
|
|||
|
check_lines({ "(。。。)。" })
|
|||
|
vim.cmd("normal ysibB")
|
|||
|
check_lines({ "({。。。})。" })
|
|||
|
set_curpos({ 1, 3 })
|
|||
|
vim.cmd("normal yslr")
|
|||
|
check_lines({ "({[。]。。})。" })
|
|||
|
vim.cmd("normal VS|")
|
|||
|
check_lines({ "|", "({[。]。。})。", "|" })
|
|||
|
|
|||
|
set_lines({
|
|||
|
"1234567890",
|
|||
|
"。。。。。",
|
|||
|
"1234567890",
|
|||
|
})
|
|||
|
set_curpos({ 2, 4 })
|
|||
|
vim.cmd("normal! v")
|
|||
|
set_curpos({ 3, 7 })
|
|||
|
vim.cmd("normal Sb")
|
|||
|
check_lines({
|
|||
|
"1234567890",
|
|||
|
"。(。。。。",
|
|||
|
"1234567)890",
|
|||
|
})
|
|||
|
set_curpos({ 2, 16 })
|
|||
|
vim.cmd("normal! v")
|
|||
|
set_curpos({ 2, 11 })
|
|||
|
vim.cmd("normal Sr")
|
|||
|
check_lines({
|
|||
|
"1234567890",
|
|||
|
"。(。。[。。]",
|
|||
|
"1234567)890",
|
|||
|
})
|
|||
|
|
|||
|
set_lines({
|
|||
|
"1234567890",
|
|||
|
"。。。。。",
|
|||
|
"1234567890",
|
|||
|
})
|
|||
|
set_curpos({ 1, 10 })
|
|||
|
vim.cmd("normal! " .. ctrl_v)
|
|||
|
set_curpos({ 3, 10 })
|
|||
|
vim.cmd("normal Sb")
|
|||
|
check_lines({
|
|||
|
"123456789(0)",
|
|||
|
"。。。。(。)",
|
|||
|
"123456789(0)",
|
|||
|
})
|
|||
|
set_curpos({ 1, 7 })
|
|||
|
vim.cmd("normal! " .. ctrl_v)
|
|||
|
set_curpos({ 3, 4 })
|
|||
|
vim.cmd("normal Sr")
|
|||
|
check_lines({
|
|||
|
"123[4567]89(0)",
|
|||
|
"。[。。。](。)",
|
|||
|
"123[4567]89(0)",
|
|||
|
})
|
|||
|
set_curpos({ 3, 1 })
|
|||
|
vim.cmd("normal! " .. ctrl_v)
|
|||
|
set_curpos({ 1, 1 })
|
|||
|
vim.cmd("normal Sa")
|
|||
|
check_lines({
|
|||
|
"<1>23[4567]89(0)",
|
|||
|
"<。>[。。。](。)",
|
|||
|
"<1>23[4567]89(0)",
|
|||
|
})
|
|||
|
|
|||
|
set_lines({
|
|||
|
"我现在在写中文字。",
|
|||
|
"我不太知道应该些什么。",
|
|||
|
"这样也可以练中文哈哈。",
|
|||
|
})
|
|||
|
set_curpos({ 1, 1 })
|
|||
|
vim.cmd("normal! 3l" .. ctrl_v .. "2j2h")
|
|||
|
vim.cmd("normal Sa")
|
|||
|
check_lines({
|
|||
|
"我<现在在>写中文字。",
|
|||
|
"我<不太知>道应该些什么。",
|
|||
|
"这<样也可>以练中文哈哈。",
|
|||
|
})
|
|||
|
|
|||
|
set_lines({
|
|||
|
"𐍈𐍈𐍈𐍈𐍈𐍈𐍈𐍈𐍈𐍈",
|
|||
|
"。。。。。",
|
|||
|
"𐍈𐍈𐍈𐍈𐍈𐍈𐍈𐍈𐍈𐍈",
|
|||
|
})
|
|||
|
set_curpos({ 1, 25 })
|
|||
|
vim.cmd("normal! " .. ctrl_v)
|
|||
|
set_curpos({ 3, 13 })
|
|||
|
vim.cmd("normal Sb")
|
|||
|
check_lines({
|
|||
|
"𐍈𐍈𐍈(𐍈𐍈𐍈𐍈)𐍈𐍈𐍈",
|
|||
|
"。(。。。)。",
|
|||
|
"𐍈𐍈𐍈(𐍈𐍈𐍈𐍈)𐍈𐍈𐍈",
|
|||
|
})
|
|||
|
|
|||
|
require("nvim-surround").setup({
|
|||
|
surrounds = {
|
|||
|
["x"] = {
|
|||
|
add = { "‘", "’" },
|
|||
|
find = "‘[^‘’]*’",
|
|||
|
},
|
|||
|
["y"] = {
|
|||
|
add = { "‘‘", "’’" },
|
|||
|
find = "‘‘[^‘’]*’’",
|
|||
|
delete = "^(‘‘)().-(’’)()$",
|
|||
|
},
|
|||
|
},
|
|||
|
})
|
|||
|
set_lines({
|
|||
|
"‘foo bar’",
|
|||
|
})
|
|||
|
set_curpos({ 1, 5 })
|
|||
|
vim.cmd("normal csx_")
|
|||
|
check_lines({
|
|||
|
"_foo bar_",
|
|||
|
})
|
|||
|
|
|||
|
set_lines({
|
|||
|
"‘‘foo bar baz’’",
|
|||
|
})
|
|||
|
set_curpos({ 1, 3 })
|
|||
|
vim.cmd("normal dsy")
|
|||
|
check_lines({
|
|||
|
"foo bar baz",
|
|||
|
})
|
|||
|
end)
|
|||
|
|
|||
|
it("can properly use line-wise surrounds", function()
|
|||
|
vim.bo.filetype = "lua"
|
|||
|
vim.bo.shiftwidth = 4
|
|||
|
vim.bo.expandtab = true
|
|||
|
set_lines({
|
|||
|
"local f = function()",
|
|||
|
" local a = 123",
|
|||
|
"end",
|
|||
|
})
|
|||
|
set_curpos({ 2, 2 })
|
|||
|
vim.cmd('normal VS"')
|
|||
|
|
|||
|
check_lines({
|
|||
|
"local f = function()",
|
|||
|
' "',
|
|||
|
" local a = 123",
|
|||
|
' "',
|
|||
|
"end",
|
|||
|
})
|
|||
|
vim.bo.filetype = nil
|
|||
|
vim.bo.shiftwidth = 8
|
|||
|
vim.bo.expandtab = false
|
|||
|
end)
|
|||
|
|
|||
|
it("can surround linewise normal mode selections", function()
|
|||
|
set_lines({
|
|||
|
"I have this text file, and my cursor is here | let's say",
|
|||
|
"then I want to surround these two lines with parenthesis",
|
|||
|
})
|
|||
|
set_curpos({ 1, 46 })
|
|||
|
vim.cmd("normal ysjb")
|
|||
|
check_lines({
|
|||
|
"(I have this text file, and my cursor is here | let's say",
|
|||
|
"then I want to surround these two lines with parenthesis)",
|
|||
|
})
|
|||
|
|
|||
|
set_lines({
|
|||
|
"some more arbitrary",
|
|||
|
"text that's spread across",
|
|||
|
"multiple lines",
|
|||
|
"or something",
|
|||
|
"i guess",
|
|||
|
})
|
|||
|
set_curpos({ 2, 6 })
|
|||
|
vim.cmd("normal ys2jB")
|
|||
|
check_lines({
|
|||
|
"some more arbitrary",
|
|||
|
"{text that's spread across",
|
|||
|
"multiple lines",
|
|||
|
"or something}",
|
|||
|
"i guess",
|
|||
|
})
|
|||
|
end)
|
|||
|
|
|||
|
it("can cancel adding delimiters to the buffer", function()
|
|||
|
set_lines({
|
|||
|
"Hello, world!",
|
|||
|
})
|
|||
|
set_curpos({ 1, 8 })
|
|||
|
vim.cmd("normal ysiw" .. esc)
|
|||
|
vim.cmd("normal ysiw" .. ctrl_c)
|
|||
|
check_lines({
|
|||
|
"Hello, world!",
|
|||
|
})
|
|||
|
end)
|
|||
|
|
|||
|
it("can cancel deleting delimiters from the buffer", function()
|
|||
|
set_lines({
|
|||
|
"Hello, (world)!",
|
|||
|
})
|
|||
|
vim.cmd("normal ds" .. esc)
|
|||
|
vim.cmd("normal ds" .. ctrl_c)
|
|||
|
check_lines({
|
|||
|
"Hello, (world)!",
|
|||
|
})
|
|||
|
end)
|
|||
|
|
|||
|
it("can cancel changing delimiters in the buffer", function()
|
|||
|
set_lines({
|
|||
|
"Hello, (world)!",
|
|||
|
})
|
|||
|
vim.cmd("normal cs" .. esc)
|
|||
|
vim.cmd("normal csb" .. esc)
|
|||
|
vim.cmd("normal cs" .. ctrl_c)
|
|||
|
vim.cmd("normal cs" .. ctrl_c)
|
|||
|
check_lines({
|
|||
|
"Hello, (world)!",
|
|||
|
})
|
|||
|
end)
|
|||
|
|
|||
|
it("doesn't re-indent visual surrounds for one line", function()
|
|||
|
set_lines({
|
|||
|
"data Foo = Foo",
|
|||
|
" { fooA :: !Decimal",
|
|||
|
" , fooB :: !Decimal",
|
|||
|
" }",
|
|||
|
})
|
|||
|
vim.opt.cindent = true
|
|||
|
set_curpos({ 3, 14 })
|
|||
|
vim.cmd("normal viwS)")
|
|||
|
check_lines({
|
|||
|
"data Foo = Foo",
|
|||
|
" { fooA :: !Decimal",
|
|||
|
" , fooB :: !(Decimal)",
|
|||
|
" }",
|
|||
|
})
|
|||
|
end)
|
|||
|
|
|||
|
it("can handle $ for visual block surround", function()
|
|||
|
set_lines({
|
|||
|
"some more placeholder text",
|
|||
|
"some more lines",
|
|||
|
"hello world",
|
|||
|
})
|
|||
|
set_curpos({ 1, 1 })
|
|||
|
vim.cmd("normal " .. ctrl_v .. "jj$S}")
|
|||
|
check_lines({
|
|||
|
"{some more placeholder text}",
|
|||
|
"{some more lines}",
|
|||
|
"{hello world}",
|
|||
|
})
|
|||
|
end)
|
|||
|
end)
|