您当前的位置: 首页 >  vim

ITKEY_

暂无认证

  • 0浏览

    0关注

    732博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【视频】vim三招秒一串

ITKEY_ 发布时间:2021-10-25 21:57:18 ,浏览量:0

  • B站视频 https://www.bilibili.com/video/BV1eP4y1t7pk/
具体操作 普通英文"

普通模式按键ci"

通用方法

上面说到英文的"很方便,那么如果是中文双引号(“”)怎么办呢?或者其他的符号呢?分享一个通用的方法。这个方法我使用的是lua脚本实现的。

~/.config/nvim/lua/cc.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('>','            
关注
打赏
1665243900
查看更多评论
0.0655s