shuiguomayi
V2EX  ›  Vim

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

  •  
  •   shuiguomayi · Dec 7, 2023 · 4875 views
    This topic created in 1068 days ago, the information mentioned may be changed or developed.

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

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

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

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

    补全我用的是 coc.nvim
    调试器我用的是 ipdb, 然后自己写个简单的 vim 集成, 例如 termdbg
    Cu635
    Cu635
    Feb 5, 2024
    22
    @vituralfuture
    vim 有良好的 gui 界面,vim 的 gui 是比较和谐的 gui 而不是一个 gui 框框加“命令行 vim”的这种,neovim 有良好的 gui 没?现在的 neovim 的 gui 就是 gui 框框加“命令行 neovim”。
    另外 neovim 的 windows 版有类似于 gvim 这种的安装包没?
    shuiguomayi
    shuiguomayi
    OP
    Feb 6, 2024
    23
    @Cu635 vim 在 macos 和 linux 上分别有什么很好的 gui ,求推荐一下。
    Cu635
    Cu635
    Feb 6, 2024
    24
    @shuiguomayi #23
    每个人需求不一样吧,我用着 vim-gtk 就觉得不错了,该有的都有,而且是正经 gui ,不是 vim 命令行套壳了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1088 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 18:16 · PVG 02:16 · LAX 10:16 · JFK 13:16
    ♥ Do have faith in what you're doing.