Neovim + Kitty = ❤️
Kitty with Fira, Cascadia, and Mini-File-Icons
- What I have done so far
- Why I choose Kitty Terminal
- Which framework I use this with
- Supported languages feature
- Startup
- Screenshot
- Dashboard
- Configuration
- Installation
- Mappings
- Add unsupported languages
- TODO
- Contributing
- License
- Ligature font, Italic font and Icon font. (Thanks to Kitty)
- Saving the last session. (Thanks to Auto-Session)
- Debugging (Thanks to Nvim-Dap)
- Unit Testing (Thanks to Vim-Test)
- REST API test. (Thanks to Rest.nvim)
- Snippet (I get snippets from rafamadriz/friendly-snippets)
- Linting and Formatting (Thanks to Efm-Langsever)
- Previewing PNG image (#4341) (Thanks to Hologram)
- Executing SQL (Thanks to SQLS.nvim)
- Support Winbar #19458, cmdheight = 0, laststatus = 3
- Support fold. #4 (Thank to Nvim-Ufo)
- Managing plugins manually.
- Support combine multiple fonts
- Support display image protocol
- React
- Svelte
- Tailwind
- Express
- Gin
- FastAPI
- Laravel
- Spring Boot
- Phoenix
Language | LSP | Treesitter | Formatter | Lint | Debug | Test |
---|---|---|---|---|---|---|
Bash | 👍 | 👍 | 👍 | 👍 | ||
C | 👍 | 👍 | ||||
CMake | 👍 | 👍 | 👍 | |||
CPP | 👍 | 👍 | 👍 | |||
CSS | 👍👍👍 | 👍 | 👍 | 👍 | ||
Dart | 👍 | 👍 | 👍 | 👍👍 | ||
Dockerfile | 👍 | 👍 | 👍 | |||
Elixir | 👍 | 👍 | 👍 | 👍 | ||
Go | 👍 | 👍 | 👍👍 | 👍 | 👍 | 👍 |
Haskell | 👍 | 👍 | 👍 | |||
HTML | 👍👍👍 | 👍 | 👍 | |||
HTTP | 👍 | |||||
Java | 👍 | 👍 | 👍 | 👍 | 👍 | |
Javascript | 👍 | 👍👍 | 👍 | 👍 | ||
JSON | 👍 | 👍 | 👍 | |||
Lua | 👍 | 👍 | 👍 | |||
Markdown | 👍 | 👍 | 👍 | |||
PHP | 👍 | 👍 | 👍 | 👍 | ||
Python | 👍 | 👍 | 👍 | 👍 | ||
React | 👍👍 | 👍 | 👍 | |||
Rust | 👍 | 👍 | 👍 | 👍 | ||
Scala | 👍 | |||||
Solidity | 👍 | 👍 | 👍 | |||
Svelte | 👍👍 | 👍 | 👍 | |||
Tex | 👍 | 👍 | 👍 | |||
TOML | 👍 | |||||
Typescript | 👍 | 👍 | 👍 | 👍 | ||
XML | 👍 | 👍 | 👍 | |||
YAML | 👍 | 👍 | 👍 | |||
Zig | 👍 | 👍 |
Last updated Jan 2 2021
=====================================
Top 10 plugins slowing nvim's startup
=====================================
1 3.097 vim-test
2 1.636 nvim-scrollview
3 1.290 nvim-treesitter
4 0.467 nvim-cmp
5 0.400 vim-ultest
6 0.398 nvim-ts-autotag
7 0.326 indent-blankline.nvim
8 0.163 cmp_luasnip
9 0.162 LuaSnip
10 0.156 cmp-path
=====================================
Find more in wiki
All settings are store in lua/settings.lua
return {
efm = {
filetypes = {
'sh',
'css',
'cpp',
'dart',
'dockerfile',
'elixir',
'go',
'haskell',
'html',
'java',
'javascript',
'javascriptreact',
'json',
'lua',
'markdown',
'php',
'python',
'rust',
'solidity',
'svelte',
'tex',
'typescript',
'typescriptreact',
'xml',
'yaml',
},
},
lspconfigs = {
filetypes = {
'sh',
'cmake',
'css',
'cpp',
'dart',
'dockerfile',
'elixir',
'go',
'haskell',
'html',
'javascript',
'json',
'lua',
'php',
'python',
'rust',
'solidity',
'svelte',
'tex',
'xml',
-- 'yaml',
'zig',
},
features = {
'efm',
'emmet',
'tailwindcss',
},
},
autoformat = {
filetypes = {
'sh',
'cmake',
'css',
'cpp',
'dart',
'dockerfile',
'elixir',
'go',
'haskell',
'html',
'java',
'javascript',
'javascriptreact',
'json',
'lua',
'markdown',
'php',
'python',
'rust',
'solidity',
'svelte',
'tex',
'typescript',
'typescriptreact',
'xml',
'yaml',
},
},
codeaction = {
filetypes = {
'css',
'cpp',
'dart',
'dockerfile',
'go',
'html',
-- 'java',
'javascript',
'javascriptreact',
'json',
-- 'lua',
'markdown',
'php',
'python',
'rust',
'svelte',
'tex',
'typescript',
'typescriptreact',
'xml',
'yaml',
},
},
colors = {
red = '#F9867B',
orange = '#CD9731',
yellow = '#FDCE68',
green = '#A3EEA0',
cyan = '#6796E6',
blue = '#7BE2F9',
purple = '#E19EF5',
tomato = '#F44747',
white = '#FFFFFF',
background = '#212835',
dark_background = '#1B212C',
border = '#3E4451',
comment = '#5C6370',
lineNumber = '#495162',
scrollbar = '#4E5666',
cursorLine = '#2C313A',
indent = '#383C44',
},
signs = {
DiagnosticSignError = ' ',
DiagnosticSignWarning = ' ',
DiagnosticSignHint = ' ',
DiagnosticSignInfo = ' ',
CodeActionSign = ' ',
},
kinds = {
Class = ' (class)',
Color = ' (color)',
Constant = ' (constant)',
Constructor = ' (constructor)',
Enum = ' (enum)',
EnumMember = ' (enum member)',
Event = ' (event)',
Field = ' (field)',
File = ' (file)',
Folder = ' (folder)',
Function = ' (function)',
Interface = ' (interface)',
Keyword = ' (keyword)',
Method = ' (method)',
Module = '{} (module)',
Operator = ' (operator)',
Property = ' (property)',
Reference = ' (reference)',
Snippet = ' (snippet)',
Struct = ' (enum)',
Text = ' (text)',
TypeParameter = ' (type parameter)',
Unit = ' (unit)',
Value = ' (value)',
Variable = ' (variable)',
},
statusline = {
git_branch_enabled = true,
diagnostic_enabled = true,
git_diff_enabled = true,
test_enabled = true,
line_column_enabled = true,
tab_enabled = true,
line_break_enabled = true,
file_format_enabled = true,
efm_enabled = true,
emoji_enabled = true,
emoji_icon = '',
},
}
- Kitty
- Neovim 0.8.0-dev (Last updated Jul 02 2022)
- mini-file-icons
- Fira code (Or any ligature font)
- Cascadia (Or any italic font)
font_family FiraCode Nerd Font Mono
bold_font Cascadia Code
italic_font Cascadia Mono
bold_italic_font Cascadia Code
symbol_map U+e900-U+e954 mini-file-icons
font_size 16
cursor #6796E6
I highly suggest managing plugins manually. This is a tedious job, but you has more power to manage your plugins.
Please store below plugins in ~/.local/share/nvim/site/pack/*/start/
.
Language | Treesitter |
---|---|
Bash | 👍 |
C | 👍 |
CMake | 👍 |
CPP | 👍 |
CSS | 👍 |
Dart | 👍 |
Dockerfile | 👍 |
Elixir | 👍 |
Go | 👍 |
Haskell | 👍 |
HTML | 👍 |
HTTP | 👍 |
Java | 👍 |
Javascript | 👍👍 |
JSON | 👍 |
Lua | 👍 |
Markdown | 👍 |
PHP | 👍 |
Python | 👍 |
React | 👍 |
Rust | 👍 |
Scala | 👍 |
Solidity | 👍 |
Svelte | 👍 |
Tex | 👍 |
TOML | 👍 |
Typescript | 👍 |
XML | 👍 |
YAML | 👍 |
Zig | 👍 |
Language | LSP |
---|---|
Bash | bash-language-server |
C | clangd |
CMake | cmake-language-server |
CPP | clangd |
CSS | vscode-langservers-extracted, emmet-ls, tailwindcss-intellisense |
Dart | dart-lang/sdk |
Dockerfile | dockerfile-language-server-nodejs |
Elixir | elixir-ls |
Go | gopls |
Haskell | haskell-language-server |
HTML | vscode-langservers-extracted, emmet-ls, tailwindcss-intellisense |
HTTP | |
Java | jdtls |
Javascript | typescript-language-server |
JSON | vscode-langservers-extracted |
Lua | lua-language-server |
Markdown | |
PHP | phpactor |
Python | pyright |
React | typescript-language-server, tailwindcss-intellisense |
Rust | rust-analyzer |
Scala | |
Solidity | vscode-solidity |
Svelte | sveltejs/language-tools, tailwindcss-intellisense |
Tex | texlab |
TOML | |
Typescript | typescript-language-server |
XML | lemminx |
YAML | yaml-language-server |
Zig | zls |
Check wiki
Check wiki
Check wiki
Check wiki
Key | Description |
---|---|
<Leader>0 | Add break point |
<Leader>1 | Toggle debug |
<Leader>2 | Step over |
<Leader>3 | Step into |
<Leader>4 | Step out |
<Leader>9 | Scope information |
<Leader>a | Code action |
<Leader>b | Toggle biscuit |
<Leader>c | Range format |
<Leader>d | Go to definition |
<Leader>e | Search Gitmojis |
<Leader>f | Search text |
<Leader>g | Toggle git hover |
<Leader>m | Format code |
<Leader>n | Show floating Cmdline |
<Leader>o | Search buffers |
<Leader>p | Search file |
<Leader>q | Turn off search's highlight |
<Leader>r | Rename variable |
<Leader>s | Save file |
<Leader>t | Toggle test |
<Leader>u | Search text in project |
<Leader>w | Delete current buffer |
<Leader>z | Preview definition |
<Leader>/ | Toggle comment |
<M-b> | Toggle Explorer |
<M-d> | Toggle Debug sidebar |
<M-t> | Toggle Terminal |
<M-r> | Toggle Rest Tab |
<M-s> | Toggle SQL Tab |
<M-x> | Toggle Symbol sidebar |
jk | Insert to normal |
gh | Go to left window |
gj | Go to above window |
gk | Go to below window |
gl | Go to right window |
cj | Go to above change |
ck | Go to below change |
cb | Go to both change |
c0 | Go to none change |
]d | Go to next diagnostic |
[d | Go to previous diagnostic |
]b | Go to next Buffer |
[b | Go to previous Buffer |
]g | Go to next Git conflict |
[g | Go to previous Git conflict |
]q | Go to next Tab |
[q | Go to previous Tab |
]t | Go to next failed test |
[t | Go to previous failed test |
]x | Go to next function |
[x | Go to previous function |
You can add unsupported languages by follow these steps.
If Treesitter supports your language, then you can run this command to install syntax highlight.
:TSInstall <language>
You can find server for your language Here.
After you've installed the LSP, you need to create a file in after/ftplugin
,
lua/languages
.
-- lua/langauges/your-language.lua
local lsp = require('languages.lsp')
local M = {}
M.lsp_server = '<name of LSP>'
M.lsp = {
capabilities = lsp.capabilities,
on_attach = lsp.on_attach,
-- Any extra configuration should put there
}
return M
-- after/ftplugin/your-language.lua
vim.opt.indentexpr = 'nvim_treesitter#indent()' -- Optional, If you use indent of treesitter
require('cmp').setup.buffer({
sources = {
{ name = 'nvim_lsp' },
{ name = 'luasnip' }, -- Optional, If you use snippet
{ name = 'path' }, -- Optional, If your language need path
{ name = 'nvim_lsp_signature_help' }, -- Optional, If your language has signature
},
})
You also need to add your language to /lua/settings.lua
-- /lua/settings.lua
return {
lspconfigs = {
filetypes = {
...,
'<your lanugage>',
...,
},
},
}
You need to install these tools first then go to /lua/languages/<your language>.lua
-- /lua/languages/<your language>.lua
M.efm = {
{
formatCommand = 'formatter1',
formatStdin = true,
},
{
formatCommand = 'formatter2',
formatStdin = true,
},
{
lintCommand = 'linter1',
lintIgnoreExitCode = true,
lintStdin = true,
lintFormats = {
'Your linter format',
},
},
}
M.all_format = { efm = 'Formatter1 Formatter2 Linter1' }
M.default_format = 'efm'
You can check debug server here
You can check test tools here
- Show theme in wiki
- Support Flutter
- Use nix to manage package.
- Add test summary to sidebar
- Change highlight of nvim-dap-ui
- Change highlight of vim-ultest
- Handle lsp_extension
- Support nvim-covarage
- Support nvim-ufo
- Support nvim-notify
- Support Graphql
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.