V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
shuiguomayi
V2EX  ›  Vim

用 vim/nvim 写 Python 用什么插件?

  •  
  •   shuiguomayi · 142 天前 · 1968 次点击
    这是一个创建于 142 天前的主题,其中的信息可能已经有所发展或是发生改变。

    各位,用 vim/nvim 写 python 用什么插件? 比如,

    • linter 和 formater ,可以用 ruff 。
    • 静态代码检测可以用 pyright 。
    • 定义,跳转,引用,等等可以用啥呢?
    • 不知道需要有啥的?有没有大一统的插件,提供 IDE 中的一些比较常用的并且 Basic 的能力。
    24 条回复    2024-02-06 17:52:22 +08:00
    biglion666
        1
    biglion666  
       142 天前
    ale 加 ruff
    补全用 YCM
    vituralfuture
        2
    vituralfuture  
       142 天前 via Android
    先安装个 mason ,它能帮你解决 linter ,formator ,lsp server 的安装,lsp 可以用 pyright ,虽然功能没有 pylance 多,但是 pylance 闭源页用不了,lsp 提供了跳转到定义,到声明,查找引用这些功能

    我并没有找到一个大统一的插件,我用 neovim 觉得最大的问题就是,缺少一个 code runner ,导致我每次运行都要手动输入命令
    还有一个比较影响体验的就是 lsp 的补全提示太过简单粗暴,把太多无关的东西都显示出来了,而 jetbrain 的 IDE 自然是做过优化,比如结合上下文去掉不合理的,甚至还利用机器学习将候选补全选项排序
    vituralfuture
        3
    vituralfuture  
       142 天前 via Android   ❤️ 1
    另外说一下,如果想要把(n)vim 当做 IDE ,不建议使用 vim ,vim 体系已经很老了,比如 vim script 性能问题,异步支持太差,lsp 支持也没有。
    neovim 使用纯 lua 配置不仅性能好,能干的事也更多了,neovim 内置 lsp 支持,还解决了 vim 一直以来存在的异步太弱的问题,倒逼 vim 也添加了异步功能
    BBCCBB
        4
    BBCCBB  
       142 天前
    不想折腾就用 coc.nvim
    popil1987
        5
    popil1987  
       142 天前
    astrovim 试试
    xxiaowangwang
        6
    xxiaowangwang  
       142 天前
    use("williamboman/mason.nvim")
    use("williamboman/mason-lspconfig.nvim")
    use("neovim/nvim-lspconfig")
    use("hrsh7th/cmp-nvim-lsp")
    use({
    "glepnir/lspsaga.nvim",
    branch = "main",
    requires = {
    -- { "nvim-tree/nvim-web-devicons" },
    { "nvim-treesitter/nvim-treesitter" },
    },
    })
    use("jose-elias-alvarez/null-ls.nvim")
    use("jayp0521/mason-null-ls.nvim")
    use({
    "nvim-treesitter/nvim-treesitter",
    run = function()
    local ts_update = require("nvim-treesitter.install").update({ with_sync = true })
    ts_update()
    end,
    })

    仅供参考。。。漏了啥不确定
    TimePPT
        7
    TimePPT  
       142 天前
    https://vim.fisadev.com/
    这个项目可以参考
    iorilu
        8
    iorilu  
       142 天前
    不建议浪费时间折腾

    有那空可以多写点代码
    PTLin
        9
    PTLin  
       142 天前
    直接用 LazyVim ,别折磨自己,安装完成直接在 nvim 里运行 LazyExtras 命令安装 python 支持。
    SiLenceControL
        10
    SiLenceControL  
       142 天前
    直接 vscode 不香吗。。。。?
    yfixx
        11
    yfixx  
       142 天前 via Android
    ale+ycm
    ck65
        12
    ck65  
       142 天前
    我在用的一键包 https://nvchad.com 终结( in most common cases )所有的折腾。
    churchill
        13
    churchill  
       142 天前
    我的配置, 如果要调试的话还得加上 dap ,个人体验并不好用
    return {
    {
    "nvim-treesitter/nvim-treesitter",
    opts = function(_, opts)
    vim.list_extend(opts.ensure_installed, { "ninja", "python", "rst", "toml" })
    end,
    },
    {
    "jose-elias-alvarez/null-ls.nvim",
    opts = function(_, opts)
    local nls = require("null-ls")
    table.insert(opts.sources, nls.builtins.formatting.black)
    end,
    },
    {
    "williamboman/mason.nvim",
    opts = function(_, opts)
    vim.list_extend(opts.ensure_installed, { "debugpy", "black", "ruff" })
    end,
    },
    {
    "neovim/nvim-lspconfig",
    opts = {
    servers = {
    ruff_lsp = {},
    pyright = {
    settings = {
    python = {
    analysis = {
    autoImportCompletions = true,
    typeCheckingMode = "off",
    autoSearchPaths = true,
    useLibraryCodeForTypes = true,
    diagnosticMode = "openFilesOnly",
    stubPath = vim.fn.stdpath("data") .. "/lazy/python-type-stubs/stubs",
    },
    },
    },
    },
    },
    setup = {
    ruff_lsp = function()
    local lsp_utils = require("plugin.lsp.utils")
    lsp_utils.on_attach(function(client, _)
    if client.name == "ruff_lsp" then
    client.server_capabilities.hoverProvider = false
    end
    end)
    end,
    pyright = function(_, _)
    local lsp_utils = require("plugin.lsp.utils")
    lsp_utils.on_attach(function(client, bufnr)
    local map = function(mode, lhs, rhs, desc)
    if desc then
    desc = desc
    end
    vim.keymap.set(
    mode,
    lhs,
    rhs,
    { silent = true, desc = desc, buffer = bufnr, noremap = true }
    )
    end
    if client.name == "pyright" then
    map("n", "<leader>lo", "<cmd>PyrightOrganizeImports<cr>", "Organize Imports" )
    map("n", "<leader>lC", function() require("dap-python").test_class() end, "Debug Class" )
    map("n", "<leader>lM", function() require("dap-python").test_method() end, "Debug Method" )
    map("v", "<leader>lE", function() require("dap-python").debug_selection() end, "Debug Selection" )
    end
    end)
    end,
    },
    },
    },
    {
    "microsoft/python-type-stubs",
    cond = false,
    },
    {
    "linux-cultist/venv-selector.nvim",
    cmd = "VenvSelect",
    opts = {},
    keys = { { "<leader>lv", "<cmd>:VenvSelect<cr>", desc = "Select VirtualEnv" } },
    },
    }
    Guaidaodl
        14
    Guaidaodl  
       142 天前
    @vituralfuture CodeRunner 的替代可以考虑 asynctask
    Ocean810975
        15
    Ocean810975  
       142 天前 via Android
    lazyvim 吧,我记得对 Python 支持挺好的,虽然我不用它写 Python
    fcfangcc
        16
    fcfangcc  
       142 天前
    为何要折磨自己,vscode remote 不香吗
    Dimen61
        17
    Dimen61  
       141 天前
    大家能说一下现在直接用 vim 而不是 vscode + vimmode 的好处🐴
    shuiguomayi
        18
    shuiguomayi  
    OP
       141 天前
    @xxiaowangwang jose-elias-alvarez/null-ls.nvim", 可惜,这个已经停止维护了。
    shuiguomayi
        19
    shuiguomayi  
    OP
       141 天前
    @vituralfuture nvim 很好用,哈哈。
    xxiaowangwang
        20
    xxiaowangwang  
       141 天前
    @shuiguomayi https://github.com/nvimtools/none-ls.nvim 可以用这个替代。我还没试,等我有空更新下我的 vim 的配置
    fanhed
        21
    fanhed  
       128 天前
    Q: 定义,跳转,引用,等等可以用啥呢?
    A: 我用的是 gutentags 配合 Universal Ctags + gnu global

    补全我用的是 coc.nvim
    调试器我用的是 ipdb, 然后自己写个简单的 vim 集成, 例如 termdbg
    Cu635
        22
    Cu635  
       81 天前
    @vituralfuture
    vim 有良好的 gui 界面,vim 的 gui 是比较和谐的 gui 而不是一个 gui 框框加“命令行 vim”的这种,neovim 有良好的 gui 没?现在的 neovim 的 gui 就是 gui 框框加“命令行 neovim”。
    另外 neovim 的 windows 版有类似于 gvim 这种的安装包没?
    shuiguomayi
        23
    shuiguomayi  
    OP
       81 天前
    @Cu635 vim 在 macos 和 linux 上分别有什么很好的 gui ,求推荐一下。
    Cu635
        24
    Cu635  
       80 天前
    @shuiguomayi #23
    每个人需求不一样吧,我用着 vim-gtk 就觉得不错了,该有的都有,而且是正经 gui ,不是 vim 命令行套壳了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2852 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 07:19 · PVG 15:19 · LAX 00:19 · JFK 03:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.