【问题标题】:Neovim + Lua: how to use different mappings depending on file type?Neovim + Lua:如何根据文件类型使用不同的映射?
【发布时间】:2022-08-05 08:41:03
【问题描述】:

我有以下 lua 函数用于在 neovim 中映射键

local M = {}

function M.map(mode, lhs, rhs, opts)
    -- default options
    local options = { noremap = true }

    if opts then
        options = vim.tbl_extend(\"force\", options, opts)
    end

    vim.api.nvim_set_keymap(mode, lhs, rhs, options)
end

return M

并将其用于键映射,如下所示:

map(\"\", \"<Leader>f\", \":CocCommand prettier.forceFormatDocument<CR>\") 
map(\"\", \"<Leader>f\", \":RustFmt<CR>\")

我只想将:RustFmt 用于.rs 文件,将:CocCommand prettier.forceFormatDocument 用于所有其他文件。

这可能与vim.api.nvim_set_keymap 有关吗?如果可以,我该怎么做?

  • @DoktorOSwaldo,不完全是。 nvim_set_keymap 上的文档说它的选项不能接受 &lt;buffer&gt;neovim.io/doc/user/api.html#nvim_set_keymap()
  • 尝试将特定文件的配置放在 ftplugin 目录中。
  • @Slava.In,对不起,我删除了标志,但评论仍然存在。我看到它不一样。但是这个问题已经回答了很多次了。有两种方法。您可以使用特定于文件类型的autocmd,或者在我看来更好,如unrealapex 所说,使用ftplugin 目录。
  • 我想知道如何在描述的开头添加文件名local filename = vim.api.nvim_buf_get_name(0):gsub(\'^.*/\', \'\'):` { desc = \"string\" }` 这样我就可以调试我的映射,将它们与其他映射区分开来。

标签: lua neovim keymapping


【解决方案1】:

感谢@DoktorOSwaldo 和@UnrealApex,我能够使用ftplugin 解决问题。

脚步:

  • ~/.config/nvim 内创建ftplugin 目录。
  • ftplugin 目录中创建一个文件rust.lua
  • rust.lua 中导入map util 并定义键映射。
local map = require("utils").map

-- Format document
map("", "<Leader>f", ":RustFmt<CR>")

【讨论】:

    【解决方案2】:

    您可以在 utils.lua 配置文件中创建 format 函数:

    function M.format()
      if vim.bo.filetype == 'rust' then
        vim.cmd('RustFmt')
      else
        vim.cmd('CocCommand prettier.forceFormatDocument')
      end
    

    并像这样定义您的键映射:

    map("", "<Leader>f", "<cmd>:lua require('utils').format<CR>")
    

    【讨论】:

      猜你喜欢
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多