Theovim started when I took CS252: Systems Programming in 2023, which required students to use command line text editors and debuggers to work on projects.
My freind saw me using the "VS Code in terminal" (I had very basic LSP functionalities set up) and asked me how to set up Neovim on his SSH account.
I was just a baby Neovim user at the time, so I reluctantly shared my configuration into a separate private repository with him, which he named Theovim and shared with other people.
Over time, I learned Lua, Neovim APIs, and Neovim ecosystem, and I started spending more time improving Neovim, often preferring building my own Lua function over using plugins.
One of the first custom features I implemented for my Vim-illiterate friend was :TheovimHelp
(272daff), a Lua function to open a markdown document in a floating window.
The whole journey helped me use Neovim more.
Neovim has been my only text editor for 2 years now, using it for coding, journaling, and everything in between.
Recently, I noticed that I gravitate toward plain Vim, which also has the fully-featured LSP and fuzzy finder config but with more limited and simpler way. I may have overcomplicated my Neovim config with features I really do not use, making it harder to use and maintain. My love for Neovim is still the same, but I think it is a good time to go back to the basics. You can find much simpler Neovim config in my dotfiles repository.
Theovim is my personal Neovim configuration, featuring a complete Telescope, Treesitter, and LSP setup, ~30 carefully selected plugins, and custom UI components in Lua.
Theovim:
- prioritizes built-in Neovim features and Lua over plugins to avoid duplicate keybindings and features
- keeps the stock configuration as much as possible when using external plugins -- the plugin author knows more about the plugin than I do
- follows the Open-closed Principle when organizing Lua configuration modules
For more information, read the Highlights section and the built-in help documentation using :help theovim
.
- A terminal emulator with true color support. A few recommendations:
- Wezterm (my personal choice)
- Kitty
- Alacritty
- iTerm 2 for MacOS
- Alternatively, you can use a GUI Neovim client like Neovide
- Preferably the latest Neovim
- NerdFonts to render glyphs
make
and some C compiler to compiletelescope-fzf-native.nvim
npm
,g++
(gcc-c++
), andunzip
for some LSP serversgit
to update Theovim
Note
I highly recommend you to fork this repository and tweak settings on your own.
# Optional backup
[[ -e ~/.config/nvim ]] && mv ~/.config/nvim ~/.config/nvim.bak
# Install Theovim files in ~/.config/nvim
git clone --depth 1 https://github.com/theopn/theovim.git ~/.config/nvim
:help theovim-tldr
: Summary of the Theovim help documentation
Theovim creates a solid base Neovim experience by maximizing built-in features.
The init.lua
file initializes sensible default options, autocmds, and keybindings without external plugins or modules.
- Automatically adjust indentation settings using ftplugin
- Spell check in relevant buffers
- Fold using Tree-sitter
- Toggle-able floating terminal
- Smarter window navigation
For more information:
:help theovim-init-options
:help theovim-init-keymaps
:help theovim-init-commands
:help theovim-init-autocmds
:help theovim-init-netrw
Theovim provides ~30 carefully selected plugins managed by lazy.nvim. Here are some of the plugins that will make your life easier.
- oil.nvim is a file manager that lets you manage files like a Vim buffer
- nvim-autopairs automatically insert matching parentheses, quotes, etc.
- which-key.nvim displays a popup with all possible keybindings
- nvim-colorizer.lua highlight color codes (hex codes, ANSI color name such as "Magenta", CSS functions, etc.)
- todo-comments.nvim highlights keywords such as
TODO
,WARN
, etc. - gitsigns.nvim provides Git signs in the gutter (+, -, ~, etc.) as well as other useful Git functionalities, such as diff, navigating hunks, and blame tool
- Tokyo Night is a beautiful default theme for Theovim
- Markdown Preview offers a real-time previewer for markdown files in your browser
- VimTeX is a LaTeX integration for Vim, providing syntax highlights and real-time compilation.
For more information:
:help theovim-plugins
Telescope.nvim is a fuzzy finder for Neovim. It allows you to jump between files, buffers, and anything you could think of in a matter of a few keystrokes.
My Telescope configuration is heavily inspired by Kickstart.nvim, a configuration template written by TJ DeVries who is the author of Telescope.nvim and the core maintainer of Neovim.
A few of my favorite Telescope features:
:Telescope buffers
(<leader><leader>
): lists all open buffers:Telescope oldfile
(<leader>s.
): finds recently opened files:Telescope
(<leader>ss
): searches Telescope functions using Telescope:Telescope find_files
(<leader>sf
): searches files in the current and children directories:Telescope live_grep
(<leader>sg
): searches for a word in the all the files in the current and children directories:Telescope git_commits
(<leader>gc
): searches for Git commits
For more information:
:help theovim-telescope
Treesitter (TS) is an incremental parser generator for more accurate syntax highlighting compared to the default regex-based highlighting. TS also integrates with Vim's folding and selection mechanism to provide a more efficient navigation and editing experience.
For more information:
:help theovim-treesitter
Neovim's built-in LSP offers modern IDE features for any language you want (assuming one of the 350+ Neovim LSP servers supports the language you use) with flexible customizability and low resource usage. Like Telescope, my LSP configuration is heavily inspired by TJ's Kickstart.nvim.
There are three main parts of LSP:
- Diagnostics: error diagnostics and fix suggestions
- LSP: hover documentation, formatting, refactoring, and much more
- Completion: auto-completion for keywords, variables, templates (snippets), buffer words, and paths
For more information:
:help theovim-diagnostic
:help theovim-lsp
:help theovim-completion
Theovim features unique UI components written in Lua.
- Tabline: A simple and unique Tabline with buffer information to keep track of open buffers without sacrificing Vim's built-in tab system
- Statusline: A simple and informative Statusline inspired by Mini.nvim (https://github.com/echasnovski/mini.nvim), featuring Git and LSP information
- Dashboard: Startup dashboard with a random ASCII art that resemble my chunky cat Oliver
For more information:
:help theovim-ui
- Core:
- Neovim source code repository or
$VIMRUNTIME/ftplugin/
: Ftplugin examples - A Reddit comment on "Share your favorite .vimrc lines...":
SmarterWinMove
function - Floating toggle-able terminal in Neovim in 50 lines of Lua by TJ DeVries: toggle-able floating terminal
- How I'm able to take notes in mathematics lectures using LaTeX and Vim: keybinding to fix the nearest spelling mistake
- Neovim source code repository or
- Telescope, Treesitter, and LSP:
- Kickstart.nvim: Telescope, Treesitter, and LSP config
- nvim-cmp Wiki: Completion icon config
- nvim-lspconfig Wiki: Hover doc customization
- UI:
- NvChad UI plugin and Kodo: Startup dashboard
- nvim-tabline:
setup()
function for Tabline - Custom Neovim Statusline by nuxsh: Overall custom Statusline structure
- Mini.statusline: Statusline mode and Git functions
- Tools:
- Stuff.nvim: Notepad
- Documentation:
- Built-in insert mode help documentation (
:h insert.txt
): Theovim help formatting - Tokyo Night Wallpapers: Wallpaper in the screenshot
- Built-in insert mode help documentation (