Neovim 和 Pyright:Python 代码的自动完成功能有限

问题描述 投票:0回答:1

NeovimPyright 的新手。我从这个教程中学到了:https://youtu.be/zHTeCSVAFNY?si=6G-b4caNl0Bx2xmG

因此,我很高兴看到此代码片段自动完成 for 循环:

snippet in neovim for adding a python for loop

但在其他情况下我没有看到任何自动完成。示例 1:写入

for value in...
时不会自动完成变量“list”的名称。示例 2:虽然我的 python 代码在文件开头包含
import os
,但 Neovim 在编写
os.walk
时不建议任何
for root, dirs, files in os.w...
自动完成:

enter image description here

我想知道这是否是我的配置的限制,或者是否是Pyright的限制。

我将非常感谢您的意见和建议。

有关我的系统的信息:

  • Linux Mint,版本 6
  • Python 3.11
  • Neovim v0.10.2

作为对 InSync 评论(2024 年 11 月 4 日)的答复,我现在添加三个 lua 插件文件(lsp-config.lua、none-ls.lua 和completions.lua)供您参考。

lsp-config.lua:

return {
    {
        "williamboman/mason.nvim", -- installation
        lazy = false,
        config = function()
            require("mason").setup() -- setup
        end,
    },
    {
        "williamboman/mason-lspconfig.nvim", -- installation
        lazy = false,
        opts = {
            auto_install = true, -- instead of something like ensure_installed = { "lua_ls", "pyright" },
        },
    },
    {
        "neovim/nvim-lspconfig",
        lazy = false,
        config = function()
            local capabilities = require("cmp_nvim_lsp").default_capabilities()
            local lspconfig = require("lspconfig")
            lspconfig.html.setup({
                capabilities = capabilities,
            })
            lspconfig.lua_ls.setup({
                capabilities = capabilities,
            })
            lspconfig.pyright.setup({
                capabilities = capabilities,
            })

            vim.keymap.set("n", "K", vim.lsp.buf.hover, {})
            vim.keymap.set("n", "<leader>gd", vim.lsp.buf.definition, {})
            vim.keymap.set("n", "<leader>gr", vim.lsp.buf.references, {})
            vim.keymap.set("n", "<leader>ca", vim.lsp.buf.code_action, {})
        end,
    },
}

无-ls.lua:

return {
    "nvimtools/none-ls.nvim", -- calls none-ls through short github url
    config = function()
        local null_ls = require("null-ls")
        null_ls.setup({
            sources = {
                null_ls.builtins.formatting.stylua, -- formatter for lua installed with Mason
                null_ls.builtins.formatting.black, -- formatter for python installed with Mason
                null_ls.builtins.formatting.isort, -- formatter for python installed with Mason
            },
        })
        vim.keymap.set("n", "<leader>gf", vim.lsp.buf.format, {}) -- for instance, adds double quotes instead of single quotes when the relevant language server advices it
    end,
}

completions.lua:

return {
    { "hrsh7th/cmp-nvim-lsp" },
    {
        "L3MON4D3/LuaSnip",
        dependencies = {
            "saadparwaiz1/cmp_luasnip",
            "rafamadriz/friendly-snippets",
        },
    },
    {
        "hrsh7th/nvim-cmp",
        config = function()
            local cmp = require("cmp")
            require("luasnip.loaders.from_vscode").lazy_load()

            cmp.setup({
                snippet = {
                    expand = function(args)
                        require("luasnip").lsp_expand(args.body) -- For `luasnip` users
                    end,
                },
                window = {
                    completion = cmp.config.window.bordered(),
                    documentation = cmp.config.window.bordered(),
                },
                mapping = cmp.mapping.preset.insert({
                    ["<C-b>"] = cmp.mapping.scroll_docs(-4),
                    ["<C-f>"] = cmp.mapping.scroll_docs(4),
                    ["<C-Space>"] = cmp.mapping.complete(),
                    ["<C-e>"] = cmp.mapping.abort(),
                    ["<CR>"] = cmp.mapping.confirm({ select = true }),
                }),
                sources = cmp.config.sources({
                    -- { name = 'nvim_lsp' },
                    { name = "luasnip" }, -- For luasnip users.
                }, {
                    { name = "buffer" },
                }),
            })
        end,
    },
}
python neovim pyright
1个回答
0
投票

解决方案是:取消上面文件

completions.lua
中行-- { name = 'nvim_lsp' },的注释。这样,Pyright就可以提出自动完成建议。来源:视频下方以“对于任何人......”开头的评论https://youtu.be/iXIwm4mCpuc?si=fBTLwIr3gUr__8-K

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.