- B站视频 https://www.bilibili.com/video/BV1eP4y1t7pk/
普通模式按键ci"
上面说到英文的"
很方便,那么如果是中文双引号(“”
)怎么办呢?或者其他的符号呢?分享一个通用的方法。这个方法我使用的是lua脚本实现的。
lua脚本内容如下:
local cc = {}
function cc.cc(leftChar, rightChar)
local cursor = vim.api.nvim_win_get_cursor(0)
local line = tonumber(cursor[1])
--光标所在行索引
local index = tonumber(cursor[2])
--lua是从1开始的
index = index + 1
local lineText = vim.api.nvim_buf_get_lines(nil, line - 1, line, true)[1]
--搜索开始位置
local left, llen = string.find(lineText, leftChar)
if left == nil or llen == nil or index == nil then
return
end
--光标左面没有找到就直接退出
if left > index then
return
end
local leftSearch = 1
local llenSearch = 1
--防止死循环
local count = 1
while leftSearch ~= nil do
leftSearch, llenSearch = string.find(lineText, leftChar, llenSearch)
if leftSearch ~= nil then
if leftSearch >= index then
break
end
left = leftSearch
llen = llenSearch
end
count = count + 1
if count > 100 then
break
end
end
--搜索结束位置
local right, _ = string.find(lineText, rightChar, index)
if left == nil or right == nil then
return
end
local str1 = string.sub(lineText, 0, llen)
local str2 = string.sub(lineText, right, #lineText)
local lastStr = str1 .. str2
vim.api.nvim_buf_set_lines(nil, line - 1, line, true, {lastStr})
vim.api.nvim_win_set_cursor(0, {line, llen})
vim.fn.feedkeys("i")
end
return cc
按键配置
nnoremap cc" lua require('cc').cc('“','”')
nnoremap cc[ lua require('cc').cc('【','】')
nnoremap cc> lua require('cc').cc('>','
关注
打赏