{"id":13486660,"url":"https://github.com/jdhao/nvim-config","last_synced_at":"2025-05-13T22:03:59.361Z","repository":{"id":37437922,"uuid":"183460365","full_name":"jdhao/nvim-config","owner":"jdhao","description":"A modern Neovim configuration with full battery for Python, Lua, C++, Markdown, LaTeX, and more...","archived":false,"fork":false,"pushed_at":"2025-04-22T15:54:33.000Z","size":4316,"stargazers_count":3847,"open_issues_count":8,"forks_count":554,"subscribers_count":43,"default_branch":"main","last_synced_at":"2025-04-25T07:11:48.770Z","etag":null,"topics":["neovim","neovim-conf","neovim-config","neovim-configuration","neovim-dotfiles","nvim","nvim-config","nvim-configuration"],"latest_commit_sha":null,"homepage":"","language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jdhao.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":["https://paypal.me/jdhao"]}},"created_at":"2019-04-25T15:20:42.000Z","updated_at":"2025-04-24T13:40:50.000Z","dependencies_parsed_at":"2024-02-22T23:26:25.256Z","dependency_job_id":"a9ff8d9a-8b25-4961-bc4e-2f6ebafece9f","html_url":"https://github.com/jdhao/nvim-config","commit_stats":{"total_commits":1263,"total_committers":8,"mean_commits":157.875,"dds":0.006334125098970689,"last_synced_commit":"81f64ed32eb229ffe22cec030ab0126b981ab9aa"},"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdhao%2Fnvim-config","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdhao%2Fnvim-config/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdhao%2Fnvim-config/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdhao%2Fnvim-config/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jdhao","download_url":"https://codeload.github.com/jdhao/nvim-config/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251338432,"owners_count":21573557,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["neovim","neovim-conf","neovim-config","neovim-configuration","neovim-dotfiles","nvim","nvim-config","nvim-configuration"],"created_at":"2024-07-31T18:00:49.587Z","updated_at":"2025-05-13T22:03:59.355Z","avatar_url":"https://github.com/jdhao.png","language":"Lua","funding_links":["https://paypal.me/jdhao"],"categories":["Lua","LUA"],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\u003cp\u003e\n    \u003ca\u003e\n      \u003cimg alt=\"Linux\" src=\"https://img.shields.io/badge/Linux-%23.svg?style=flat-square\u0026logo=linux\u0026color=FCC624\u0026logoColor=black\" /\u003e\n    \u003c/a\u003e\n    \u003ca\u003e\n      \u003cimg alt=\"macOS\" src=\"https://img.shields.io/badge/macOS-%23.svg?style=flat-square\u0026logo=apple\u0026color=000000\u0026logoColor=white\" /\u003e\n    \u003c/a\u003e\n    \u003ca\u003e\n      \u003cimg alt=\"Windows\" src=\"https://img.shields.io/badge/Windows-%23.svg?style=flat-square\u0026logo=windows\u0026color=0078D6\u0026logoColor=white\" /\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/neovim/neovim/releases/tag/stable\"\u003e\n      \u003cimg src=\"https://img.shields.io/badge/Neovim-0.11.1-blueviolet.svg?style=flat-square\u0026logo=Neovim\u0026logoColor=green\" alt=\"Neovim minimum version\"/\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/jdhao/nvim-config/search?l=vim-script\"\u003e\n      \u003cimg src=\"https://img.shields.io/github/languages/top/jdhao/nvim-config\" alt=\"Top languages\"/\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/jdhao/nvim-config/graphs/commit-activity\"\u003e\n      \u003cimg src=\"https://img.shields.io/github/commit-activity/m/jdhao/nvim-config?style=flat-square\" /\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/jdhao/nvim-config/graphs/contributors\"\u003e\n      \u003cimg src=\"https://img.shields.io/github/contributors/jdhao/nvim-config?style=flat-square\" /\u003e\n    \u003c/a\u003e\n    \u003ca\u003e\n      \u003cimg src=\"https://img.shields.io/github/repo-size/jdhao/nvim-config?style=flat-square\" /\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/jdhao/nvim-config/blob/master/LICENSE\"\u003e\n      \u003cimg src=\"https://img.shields.io/github/license/jdhao/nvim-config?style=flat-square\u0026logo=GNU\u0026label=License\" alt=\"License\"/\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\u003c/div\u003e\n\n# Introduction\n\nThis repo hosts my Nvim configuration for Linux, macOS, and Windows.\n`init.lua` is the config entry point for terminal Nvim,\nand `ginit.vim` is the additional config file for [GUI client of Nvim](https://github.com/neovim/neovim/wiki/Related-projects#gui).\n\nMy configurations are heavily documented to make it as clear as possible.\nWhile you can clone the whole repository and use it, it is not recommended though.\nGood configurations are personal. Everyone should have his or her unique config file.\nYou are encouraged to copy from this repo the part you want and add it to your own config.\n\nTo reduce the possibility of breakage, **this config is only maintained for [the latest nvim stable release](https://github.com/neovim/neovim/releases/tag/stable).\nNo effort is spent on maintaining backward compatibility.**\n\n# Install and setup\n\nSee [doc here](docs/README.md) on how to install Nvim's dependencies, Nvim itself,\nand how to set up on different platforms (Linux, macOS, and Windows).\n\n# Features #\n\n+ Plugin management via [Lazy.nvim](https://github.com/folke/lazy.nvim).\n+ Code, snippet, word auto-completion via [nvim-cmp](https://github.com/hrsh7th/nvim-cmp).\n+ Language server protocol (LSP) support via [nvim-lspconfig](https://github.com/neovim/nvim-lspconfig).\n+ Git integration via [vim-fugitive](https://github.com/tpope/vim-fugitive).\n+ Better escaping from insert mode via [better-escape.vim](https://github.com/nvim-zh/better-escape.vim).\n+ Ultra-fast project-wide fuzzy searching via [fzf-lua](https://github.com/ibhagwan/fzf-lua).\n+ Faster code commenting via [vim-commentary](https://github.com/tpope/vim-commentary).\n+ Faster matching pair insertion and jump via [nvim-autopairs](https://github.com/windwp/nvim-autopairs).\n+ Smarter and faster matching pair management (add, replace or delete) via [vim-sandwich](https://github.com/machakann/vim-sandwich).\n+ Fast buffer jump via [hop.nvim](https://github.com/phaazon/hop.nvim).\n+ Powerful snippet insertion via [Ultisnips](https://github.com/SirVer/ultisnips).\n+ Beautiful statusline via [lualine.nvim](https://github.com/nvim-lualine/lualine.nvim).\n+ File tree explorer via [nvim-tree.lua](https://github.com/nvim-tree/nvim-tree.lua).\n+ Better quickfix list with [nvim-bqf](https://github.com/kevinhwang91/nvim-bqf).\n+ Show search index and count with [nvim-hlslens](https://github.com/kevinhwang91/nvim-hlslens).\n+ User-defined mapping hint via [which-key.nvim](https://github.com/folke/which-key.nvim).\n+ Asynchronous code execution via [asyncrun.vim](https://github.com/skywind3000/asyncrun.vim).\n+ Code highlighting via [nvim-treesitter](https://github.com/nvim-treesitter/nvim-treesitter).\n+ Code editing using true nvim inside browser via [firenvim](https://github.com/glacambre/firenvim).\n+ Beautiful colorscheme via [sainnhe/gruvbox-material](https://github.com/sainnhe/gruvbox-material) and other colorschemes.\n+ Markdown writing and previewing via [vim-markdown](https://github.com/preservim/vim-markdown) and [markdown-preview.nvim](https://github.com/iamcco/markdown-preview.nvim).\n+ LaTeX editing and previewing via [vimtex](https://github.com/lervag/vimtex)\n+ Animated GUI style notification via [nvim-notify](https://github.com/rcarriga/nvim-notify).\n+ Tags navigation via [vista](https://github.com/liuchengxu/vista.vim).\n+ Undo management via [vim-mundo](https://github.com/simnalamburt/vim-mundo)\n+ Code folding with [nvim-ufo](https://github.com/kevinhwang91/nvim-ufo) and [statuscol.nvim](https://github.com/luukvbaal/statuscol.nvim)\n+ ......\n\n# UI Demo\n\nFor more UI demos, check [here](https://github.com/jdhao/nvim-config/issues/15).\n\n## Start screen with dashboard-nvim\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/16662357/183256752-fb23b215-a6b8-4646-beed-9999f52d53f1.png\" width=\"800\"\u003e\n\u003c/p\u003e\n\n## File fuzzy finding using fzf-lua\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/user-attachments/assets/3199e35d-121a-487b-bfd1-58eb69b0b48a\" width=\"800\"\u003e\n\u003c/p\u003e\n\n## Code autocompletion with nvim-cmp\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/16662357/128590006-0fc1451f-fac1-49b2-bb95-8aba21bfa44e.gif\" width=\"800\"\u003e\n\u003c/p\u003e\n\n## Git add, commit and push via fugitive.vim\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/16662357/128590833-aaa05d53-19ef-441d-a5a9-ba1bbd3936c1.gif\" width=\"800\"\u003e\n\u003c/p\u003e\n\n## Tags\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/16662357/128589584-4036a1a2-2e0a-4bbe-8aaf-ff8b91644648.jpg\" width=\"800\"\u003e\n\u003c/p\u003e\n\n## Cursor jump via hop.nvim\n\nGo to a string starting with `se`\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/16662357/139459219-8a7e6ac4-1d24-4008-a370-b56773d7cb85.gif\" width=\"800\"\u003e\n\u003c/p\u003e\n\n## GUI-style notification with nvim-notify\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/16662357/128589873-aadb8264-1098-4834-9876-fa66a309be05.gif\" width=\"800\"\u003e\n\u003c/p\u003e\n\n## code folding with nvim-ufo and statuscol.nvim\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/user-attachments/assets/a01a56b2-7c91-43de-b305-f2fbaa81dcec\" width=\"800\"\u003e\n\u003c/p\u003e\n\n# Shortcuts\n\nSome of the shortcuts I use frequently are listed here. In the following shortcuts, `\u003cleader\u003e` represents ASCII character `,`.\n\n| Shortcut          | Mode          | platform        | Description                                                              |\n|-------------------|---------------|-----------------|--------------------------------------------------------------------------|\n| `\u003cleader\u003eff`      | Normal        | Linux/macOS/Win | Fuzzy file searching in a floating window                                |\n| `\u003cleader\u003efh`      | Normal        | Linux/macOS/Win | Fuzzy help file grepping in a floating window                            |\n| `\u003cleader\u003efg`      | Normal        | Linux/macOS/Win | Fuzzy project-wide grepping in a floating window                         |\n| `\u003cleader\u003eft`      | Normal        | Linux/macOS/Win | Fuzzy buffer tag searching in a floating window                          |\n| `\u003cleader\u003efb`      | Normal        | Linux/macOS/Win | Fuzzy buffer switching in a floating window                              |\n| `\u003cleader\u003e\u003cSpace\u003e` | Normal        | Linux/macOS/Win | Remove trailing white spaces                                             |\n| `\u003cleader\u003ev`       | Normal        | Linux/macOS/Win | Reselect last pasted text                                                |\n| `\u003cleader\u003eev`      | Normal        | Linux/macOS/Win | Edit Nvim config in a new tabpage                                        |\n| `\u003cleader\u003esv`      | Normal        | Linux/macOS/Win | Reload Nvim config                                                       |\n| `\u003cleader\u003est`      | Normal        | Linux/macOS/Win | Show highlight group for cursor text                                     |\n| `\u003cleader\u003eq`       | Normal        | Linux/macOS/Win | Quit current window                                                      |\n| `\u003cleader\u003eQ`       | Normal        | Linux/macOS/Win | Quit all window and close Nvim                                           |\n| `\u003cleader\u003ew`       | Normal        | Linux/macOS/Win | Save current buffer content                                              |\n| `\u003cleader\u003ey`       | Normal        | Linux/macOS/Win | Copy the content of entire buffer to default register                    |\n| `\u003cleader\u003ecl`      | Normal        | Linux/macOS/Win | Toggle cursor column                                                     |\n| `\u003cleader\u003ecd`      | Normal        | Linux/macOS/Win | Change current working directory to to the dir of current buffer         |\n| `\u003cspace\u003et`        | Normal        | Linux/macOS/Win | Toggle tag window (show project tags in the right window)                |\n| `\u003cleader\u003egs`      | Normal        | Linux/macOS/Win | Show Git status result                                                   |\n| `\u003cleader\u003egw`      | Normal        | Linux/macOS/Win | Run Git add for current file                                             |\n| `\u003cleader\u003egc`      | Normal        | Linux/macOS/Win | Run git commit                                                           |\n| `\u003cleader\u003egpl`     | Normal        | Linux/macOS/Win | Run git pull                                                             |\n| `\u003cleader\u003egpu`     | Normal        | Linux/macOS/Win | Run git push                                                             |\n| `\u003cleader\u003egbd`     | Normal        | Linux/macOS/Win | Delete a branch                                                          |\n| `\u003cleader\u003egbn`     | Normal        | Linux/macOS/Win | Create a new branch                                                      |\n| `\u003cleader\u003egl`      | Normal/Visual | Linux/macOS/Win | Get perm link for current/visually-select lines                          |\n| `\u003cleader\u003egbr`     | Normal        | macOS           | Browse current git repo in browser                                       |\n| `\u003cleader\u003egb`      | Visual        | macOS           | Blame current line                                                       |\n| `\u003cF9\u003e`            | Normal        | Linux/macOS/Win | Compile\u0026run current source file (for C++, LaTeX, Lua, Python)            |\n| `\u003cF11\u003e`           | Normal        | Linux/macOS/Win | Toggle spell checking                                                    |\n| `\u003cF12\u003e`           | Normal        | Linux/macOS/Win | Toggle paste mode                                                        |\n| `\\x`              | Normal        | Linux/macOS/Win | Close location or quickfix window                                        |\n| `\\d`              | Normal        | Linux/macOS/Win | Close current buffer and go to previous buffer                           |\n| `{count}gb`       | Normal        | Linux/macOS/Win | Go to buffer `{count}` or next buffer in the buffer list.                |\n| `{operator}iB`    | Normal        | Linux/macOS/Win | Operate in the whole buffer, `{operator}` can be `v`, `y`, `c`, `d` etc. |\n| `Alt-k`           | Normal        | Linux/macOS/Win | Move current line or selected lines up                                   |\n| `Alt-j`           | Normal        | Linux/macOS/Win | Move current line or selected lines down                                 |\n| `Alt-m`           | Normal        | macOS/Win       | Markdown previewing in system browser                                    |\n| `Alt-Shift-m`     | Normal        | macOS/Win       | Stopping Markdown previewing in system browser                           |\n| `ctrl-u`          | Insert        | Linux/macOS/Win | Turn word under cursor to upper case                                     |\n| `ctrl-t`          | Insert        | Linux/macOS/Win | Turn word under cursor to title case                                     |\n| `jk`              | Insert        | Linux/macOS/Win | Return to Normal mode without lagging                                    |\n\n# Custom commands\n\nIn addition to commands provided by various plugins, I have also created some custom commands for personal use.\n\n| command      | description                                                             | example                        |\n|--------------|-------------------------------------------------------------------------|--------------------------------|\n| `Redir`      | capture command output to a tabpage for easier inspection.              | `Redir hi`                     |\n| `Edit`       | edit multiple files at the same time, supports globing                  | `Edit *.vim`                   |\n| `Datetime`   | print current date and time or convert Unix time stamp to date and time | `Datetime 12345` or `Datetime` |\n| `JSONFormat` | format a JSON file                                                      | `JSONFormat`                   |\n| `CopyPath`   | copy current file path to clipboard                                     | `CopyPath relative`            |\n\n# Contributing\n\nIf you find anything that needs improving, do not hesitate to point it out or create a PR.\n\nIf you come across an issue, you can first use `:checkhealth` command provided by `nvim` to trouble-shoot yourself.\nPlease read carefully the messages provided by health check.\n\nIf you still have an issue, [open a new issue](https://github.com/jdhao/nvim-config/issues).\n\n# Further readings\n\nSome of the resources that I find helpful in mastering Nvim is documented [here](docs/nvim_resources.md).\nYou may also be interested in my posts on configuring Nvim:\n\n+ My nvim notes can be found [here](https://jdhao.github.io/categories/Nvim/)\n+ [Using Neovim for Three years](https://jdhao.github.io/2021/12/31/using_nvim_after_three_years/)\n+ [Config nvim on Linux for Python development](https://jdhao.github.io/2018/12/24/centos_nvim_install_use_guide_en/)\n+ [Nvim config on Windows 10](https://jdhao.github.io/2018/11/15/neovim_configuration_windows/)\n+ [Nvim-qt config on Windows 10](https://jdhao.github.io/2019/01/17/nvim_qt_settings_on_windows/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjdhao%2Fnvim-config","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjdhao%2Fnvim-config","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjdhao%2Fnvim-config/lists"}