18_[nvim0.5+从0单排]_lua实现快速复制Markdown中code

25 篇文章 2 订阅

视频与目录

项目
教程目录https://blog.csdn.net/lxyoucan/article/details/120641546
视频全屏https://www.bilibili.com/video/BV1eb4y187ea/
视频

18lua实现快速复制Markdown中code

正片

写代码的过程中,会经常与markdown文档打交道。你是如何快速复制md中的代码区域的呢?我这边用了个笨方法,自己写脚本实现的,这里分享给大家。这其实是我的lua练手代码,代码质量一般,大家见笑了。

创建脚本

创建如下脚本:

~/.config/nvim/lua/itkey/md.lua

内容如下:

local auto_select = {}
--向上查找关键字 return {行号,字符开始,字符结束}
function auto_select.findUp(keyword)
  return auto_select.findFirstStr(keyword, -1)
end
--向上查找关键字 return {行号,字符开始,字符结束}
function auto_select.findDown(keyword)
  return auto_select.findFirstStr(keyword, 1)
end
--查找字符第一次出现的位置
--@param keyword 查询的关键字
--@param upOrDown -1|1  -1向上或1向下查询字符
function auto_select.findFirstStr(keyword, upOrDown)
  local buff = vim.api.nvim_get_current_buf
  local a = vim.api
  --最大行数
  local line_count = vim.inspect(a.nvim_buf_line_count(buff))
  line_count = tonumber(line_count)
  --获取光标位置
  local lineCursor = a.nvim_win_get_cursor(0)[1]
  local line = lineCursor
  local isFind = false
  --获取指定行的值string
  local function getline(line_num)
    local result
    if line_num >= 1 and line_num <= line_count then
      result = a.nvim_buf_get_lines(nil, line_num - 1, line_num, true)
      result = result[1]
    end
    return result
  end
  while isFind == false do
    local result = getline(line)
    if result == nil then
      result = ""
    end
    local start, _ = string.find(result, keyword)
    if start ~= nil then
      return {line, start}
    end
    --向下找,如果找到文章末尾没有找到;就默认最后一行为结尾
    if upOrDown == 1 and line >= line_count then
      return {line, #result}
    end
    --向上找,如果找到文章末尾没有找到;就默认最后一行为结尾
    if upOrDown == -1 and line <= 0 then
      return {1, 0}
    end
    line = line + upOrDown
  end
end
--自动根据开始结束位置v模式选择
function auto_select.v(startCursor, endCursor)
  --设置光标开始位置
  vim.api.nvim_win_set_cursor(0, startCursor)
  --选中SQL
  vim.fn.feedkeys("0v" .. endCursor[1] .. "G")
  --横向坐标>0才移动
  if endCursor[2] > 0 then
    vim.fn.feedkeys(endCursor[2] .. "l")
  end
end
function auto_select.markdownV()
  local keyword = "```"
  local lineCursor = vim.api.nvim_win_get_cursor(0)[1]
  local lineString = vim.api.nvim_buf_get_lines(nil, lineCursor - 1, lineCursor, true)[1]
  --如果当前行本就有```,则判断字符长度是否超过3,来判断是开始点还是结束点
  local start, _ = string.find(lineString, keyword)
  if start ~= nil then
    if #lineString > 3 then
      vim.api.nvim_win_set_cursor(0, {lineCursor + 1, 1})
    else
      vim.api.nvim_win_set_cursor(0, {lineCursor - 1, 1})
    end
  end
  local startCursor = auto_select.findUp(keyword)
  local endCursor = auto_select.findDown(keyword)
  --markdown不考虑```与内容在同一行的情况,只选中间部分
  auto_select.v({startCursor[1] + 1, 0}, {endCursor[1] - 1, 0})
  vim.fn.feedkeys("$")
end
--复制markdown的代码块
function auto_select.markdownCopyPlus()
  auto_select.markdownV()
  vim.fn.feedkeys('"+y')
end
--auto_select.markdownCopyPlus()
return auto_select

按键映射

"markdown code自动复制
nnoremap <silent><leader>yy <cmd>lua require('itkey.md').markdownCopyPlus()<CR>

重新启动nvim后就可以使用<leader>yy来复制脚本啦!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
nvim 0.9 版本是一个开源的文本编辑器,该版本加入了对 Lua 配置的支持。Lua 是一种轻量级的脚本语言,具有简洁、高效、可嵌入等特点,因此在 nvim 使用 Lua 配置可以使编辑器的配置更加灵活、可定制性更强。 配置 nvim 0.9 版本的 Lua 插件需要以下步骤: 1. 安装 Lua 插件支持:使用适当的包管理工具,如 Packer、Packer.nvim 等安装 Lua 插件的支持。这些插件会提供对 Lua 的解释和执行环境。 2. 编写 Lua 配置文件:创建一个名为 init.lua 的文件,并在这个文件编写 Lua 配置。在此文件,可以定义插件、设置键绑定、主题、语法高亮等。例如,可以使用 Lua 的 tables 来组织配置选项和设置。 3. 加载插件和设置:在 init.lua ,可以使用 Lua 的 require 函数加载所需的插件,并使用 Lua 的函数来设置编辑器的选项。例如,可以使用 require('插件名') 来加载插件,并使用 vim.api.nvim_command() 函数来执行编辑器的设置命令。 4. 配置自动补全:Lua 在 nvim 支持 LSP(Language Server Protocol),可以通过安装相应的插件和配置文件来实现代码自动补全功能。在 init.lua ,可以使用 require('lspconfig') 加载 LSP 插件,并通过设置 LSP 服务器的配置选项来配置自动补全。 通过以上步骤,就可以配置 nvim 0.9 版本的 Lua 插件。使用 Lua 配置可以使编辑器的功能更加强大,并且可以根据自己的需求进行个性化定制。鉴于 Lua 的灵活性和易用性,Lua 配置在 nvim 的使用越来越受到开发者们的欢迎。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值