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

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

  •  
  •   shuiguomayi · 2023-12-07 09:56:55 +08:00 · 2869 次点击
    这是一个创建于 383 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    我并没有找到一个大统一的插件,我用 neovim 觉得最大的问题就是,缺少一个 code runner ,导致我每次运行都要手动输入命令
    还有一个比较影响体验的就是 lsp 的补全提示太过简单粗暴,把太多无关的东西都显示出来了,而 jetbrain 的 IDE 自然是做过优化,比如结合上下文去掉不合理的,甚至还利用机器学习将候选补全选项排序
    vituralfuture
        3
    vituralfuture  
       2023-12-07 10:16:12 +08:00 via Android   ❤️ 1
    另外说一下,如果想要把(n)vim 当做 IDE ,不建议使用 vim ,vim 体系已经很老了,比如 vim script 性能问题,异步支持太差,lsp 支持也没有。
    neovim 使用纯 lua 配置不仅性能好,能干的事也更多了,neovim 内置 lsp 支持,还解决了 vim 一直以来存在的异步太弱的问题,倒逼 vim 也添加了异步功能
    BBCCBB
        4
    BBCCBB  
       2023-12-07 10:20:45 +08:00
    不想折腾就用 coc.nvim
    popil1987
        5
    popil1987  
       2023-12-07 10:37:43 +08:00
    astrovim 试试
    xxiaowangwang
        6
    xxiaowangwang  
       2023-12-07 10:38:57 +08:00
    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  
       2023-12-07 11:14:25 +08:00
    https://vim.fisadev.com/
    这个项目可以参考
    iorilu
        8
    iorilu  
       2023-12-07 11:17:10 +08:00
    不建议浪费时间折腾

    有那空可以多写点代码
    PTLin
        9
    PTLin  
       2023-12-07 11:25:12 +08:00
    直接用 LazyVim ,别折磨自己,安装完成直接在 nvim 里运行 LazyExtras 命令安装 python 支持。
    SiLenceControL
        10
    SiLenceControL  
       2023-12-07 12:00:26 +08:00
    直接 vscode 不香吗。。。。?
    yfixx
        11
    yfixx  
       2023-12-07 12:11:40 +08:00 via Android
    ale+ycm
    ck65
        12
    ck65  
       2023-12-07 12:13:19 +08:00
    我在用的一键包 https://nvchad.com 终结( in most common cases )所有的折腾。
    churchill
        13
    churchill  
       2023-12-07 12:20:37 +08:00
    我的配置, 如果要调试的话还得加上 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  
       2023-12-07 14:08:11 +08:00
    @vituralfuture CodeRunner 的替代可以考虑 asynctask
    Ocean810975
        15
    Ocean810975  
       2023-12-07 14:22:57 +08:00 via Android
    lazyvim 吧,我记得对 Python 支持挺好的,虽然我不用它写 Python
    fcfangcc
        16
    fcfangcc  
       2023-12-07 15:01:43 +08:00
    为何要折磨自己,vscode remote 不香吗
    Dimen61
        17
    Dimen61  
       2023-12-07 22:26:18 +08:00
    大家能说一下现在直接用 vim 而不是 vscode + vimmode 的好处🐴
    shuiguomayi
        18
    shuiguomayi  
    OP
       2023-12-08 08:10:22 +08:00
    @xxiaowangwang jose-elias-alvarez/null-ls.nvim", 可惜,这个已经停止维护了。
    shuiguomayi
        19
    shuiguomayi  
    OP
       2023-12-08 08:37:07 +08:00
    @vituralfuture nvim 很好用,哈哈。
    xxiaowangwang
        20
    xxiaowangwang  
       2023-12-08 10:00:46 +08:00
    @shuiguomayi https://github.com/nvimtools/none-ls.nvim 可以用这个替代。我还没试,等我有空更新下我的 vim 的配置
    fanhed
        21
    fanhed  
       2023-12-20 18:53:51 +08:00
    Q: 定义,跳转,引用,等等可以用啥呢?
    A: 我用的是 gutentags 配合 Universal Ctags + gnu global

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