LinkedIn Sourceforge

Vincent's Blog

Pleasure in the job puts perfection in the work (Aristote)

My last neovim config facilitating Python, shell and html/css development

Posted on 2025-08-06 22:26:00 from Vincent in Nvim

Neovim configurations are never set in stone; they’re always evolving. But there comes a moment when you feel you’ve maximized what your setup can do for you. Every component is installed, configured, and working seamlessly, making your daily Neovim experience smooth and efficient. That’s exactly where I am with this config. It perfectly suits my needs, and I haven’t felt the urge to tweak it for weeks—maybe even months. It feels like I’ve hit a sweet spot. How long will this last? I’m not sure. But I’m excited to share it in my upcoming posts.


photo from https://unsplash.com/@diegojimenez

Introduction

My Neovim configuration, powered by the Lazy.nvim plugin manager, is tailored to my specific needs as a developer working primarily with Python, shell scripting, and HTML/CSS. This setup enhances productivity by providing autocompletion for variable and function names, highlighting coding errors, and flagging bad programming practices, all while maintaining a streamlined and efficient editing environment. Below, I’ll walk through the plugins and key settings that make this possible, focusing on their roles and how they integrate into a cohesive workflow.

Installation

You can find my config here: init.lua
But there is few pre-requisites.

On a FreeBSD machine, you have to add the following packages:

pkg install neovim py311-pynvim ripgrep python3 git tree-sitter py311-python-lsp-server hs-ShellCheck

Fell free to adapt the command to your own operating system.

Lazy.nvim: The Plugin Manager

At the heart of this configuration is Lazy.nvim, a lightweight and performant plugin manager that simplifies installing and managing plugins. It ensures my Neovim environment is fast and easy to maintain, with a clean setup process that clones the plugin manager into the appropriate data directory if it’s not already present. Lazy.nvim also allows specifying fallback colorschemes, my favorite ones are ron and habamax, to ensure a consistent look during plugin installation.

Plugins for a Tailored Development Experience

The plugins in this configuration are carefully chosen to support Python, shell, and HTML/CSS development, each contributing to a seamless coding experience.
The nvim-lspconfig plugin integrates Neovim’s built-in Language Server Protocol (LSP) client, enabling IDE-like features such as go-to-definition, hover documentation, and code actions. For Python, it configures the pylsp server with pylint enabled (ignoring specific warnings like long lines) and pycodestyle disabled to avoid redundant linting, while jedi_completion enhances Python-specific autocompletion.

Autocompletion is handled by nvim-cmp, a flexible completion engine that pulls suggestions from multiple sources. It’s paired with cmp-nvim-lsp for LSP-driven completions, cmp-buffer for buffer-based suggestions, cmp-path for file path completions, and cmp-nvim-lsp-signature-help for displaying function signatures as I type.

The LuaSnip plugin complements this by enabling snippet expansion, allowing me to insert reusable code templates effortlessly. Keybindings like to trigger completion and to confirm selections make the process intuitive.

For syntax highlighting and code parsing, nvim-treesitter leverages Tree-sitter to provide accurate and visually appealing highlighting for Python and Bash, along with smart indentation. This ensures my code is easy to read and properly formatted.

shellcheck.nvim integrates ShellCheck to lint my Python and Bash scripts, catching errors and suggesting improvements to maintain high-quality shell code.

For HTML/CSS development, nvim-ts-autotag simplifies tag management by automatically closing and renaming paired HTML/XML tags, streamlining the process of writing markup. The ccc.nvim plugin enhances CSS work by highlighting color codes (like #FF0000) and offering a color picker, making it easier to work with visual styles.

In markdown or in several other files, hrsh7th/cmp-emoji allows me to add emoji by first type column key ":", then the emoji's name.

Core Neovim Settings

Beyond plugins, this config includes several Neovim settings to create a comfortable and efficient editing environment. The leader key is set to the spacebar for easy access to custom keybindings, such as e to show diagnostics or gd to jump to a symbol’s definition.

Line numbers, both absolute and relative, are enabled to aid navigation, while tabs and indentation are set to four spaces with smart indentation for consistent formatting.

True color support and a persistent sign column ensure a modern, distraction-free interface, and the ron colorscheme provides a clean, readable aesthetic.

Enhancing Productivity

This configuration shines in its ability to complete variable and function names dynamically, thanks to the interplay of nvim-cmp, LSP, and snippets. It also excels at catching coding errors and bad practices through pylint for Python and ShellCheck for Bash, with diagnostics displayed in a floating window or the statusline. The statusline itself is customized to show the current file, status flags, and line-specific diagnostics with intuitive icons (e.g., ⛔ for errors, ⚠️ for warnings), keeping me informed without breaking my workflow.

Conclusion

This Lazy.nvim-based Neovim setup is a powerful, tailored solution for my Python, shell, and HTML/CSS development needs. By combining LSP-driven features, robust autocompletion, syntax highlighting, and linting, it ensures I can write clean, efficient code with minimal friction. The thoughtful settings and keybindings tie it all together, creating an editing environment that’s both productive and enjoyable to use.

Feel free to use part of it in you own init.lua config file.

Do not hesitate to add a comments if this had help you in you nvim configs.



0, 0
displayed: 2910



What is the second letter of the word Moon?