mirror of
https://github.com/jdhao/nvim-config.git
synced 2025-06-08 14:14:33 +02:00
Compare commits
33 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
092ea88703 | ||
|
|
67d59bfc2c | ||
|
|
77a5dfacd6 | ||
|
|
1373c418b9 | ||
|
|
e82b450464 | ||
|
|
08818dbf01 | ||
|
|
0ed8814aef | ||
|
|
a86f1d2f31 | ||
|
|
c1b27ee818 | ||
|
|
7eb7b4450f | ||
|
|
5443078805 | ||
|
|
dcffbf9a71 | ||
|
|
85de00f374 | ||
|
|
9adc3fdf16 | ||
|
|
6cf31e2dcb | ||
|
|
08d3d7ec08 | ||
|
|
ed52ca5914 | ||
|
|
1d0609f753 | ||
|
|
56a43e4009 | ||
|
|
22c7c6ee05 | ||
|
|
3d0f00e7e4 | ||
|
|
bbd642af1a | ||
|
|
5215a601b9 | ||
|
|
9bac7fa4f7 | ||
|
|
06910bac87 | ||
|
|
85427c6424 | ||
|
|
cf9761e9a3 | ||
|
|
7d3647ac61 | ||
|
|
a466339092 | ||
|
|
6fb30f0cf2 | ||
|
|
9b41825c2c | ||
|
|
e9319b0460 | ||
|
|
49596fb5ab |
47
README.md
47
README.md
@@ -6,6 +6,26 @@
|
||||
██ ████ ████ ██ ██ ██ ██████ ██████ ██ ████ ██ ██ ██████
|
||||
```
|
||||
|
||||
<div align="center"><p>
|
||||
<a href="https://github.com/jdhao/nvim-config/releases/latest">
|
||||
<img alt="Latest release" src="https://img.shields.io/github/v/release/jdhao/nvim-config" />
|
||||
</a>
|
||||
<a href="https://github.com/jdhao/nvim-config/commits">
|
||||
<img src="https://badgen.net/github/commits/jdhao/nvim-config" alt="Commit number" />
|
||||
</a>
|
||||
<a href="https://github.com/jdhao/nvim-config">
|
||||
<img src="https://img.shields.io/github/repo-size/jdhao/nvim-config?style=flat-square&label=Repo" alt="Repo size">
|
||||
</a>
|
||||
<a href="https://github.com/neovim/neovim/releases/tag/v0.6.1">
|
||||
<img src="https://img.shields.io/badge/Neovim-0.6.1-blueviolet.svg?style=flat-square&logo=Neovim&logoColor=green" alt="Neovim minimum version"/>
|
||||
</a>
|
||||
<img src="https://img.shields.io/github/languages/top/jdhao/nvim-config" />
|
||||
<a href="https://github.com/jdhao/nvim-config/blob/master/LICENSE">
|
||||
<img src="https://img.shields.io/github/license/jdhao/nvim-config?style=flat-square&logo=GNU&label=License" alt="License"/>
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
# Introduction
|
||||
|
||||
This repo hosts my Nvim configuration for all the platforms I am using (Linux,
|
||||
@@ -22,8 +42,8 @@ add it to your own Nvim config.
|
||||
See [doc here](docs/README.md) on how to install Nvim's dependencies, Nvim
|
||||
itself, and how to set up on different platforms (Linux, macOS and Windows).
|
||||
|
||||
**This config is tested against [Nvim 0.6.0 release](https://github.com/neovim/neovim/releases/tag/v0.6.0). No backward compatibility
|
||||
is guaranteed.**
|
||||
**This config is tested against [Nvim v0.6.1 release](https://github.com/neovim/neovim/releases/tag/v0.6.0).
|
||||
No backward compatibility is guaranteed.**
|
||||
|
||||
# Features #
|
||||
|
||||
@@ -71,7 +91,7 @@ For more UI demos, see [here](https://github.com/jdhao/nvim-config/issues/15).
|
||||
<img src="https://user-images.githubusercontent.com/16662357/139462025-7bce98c5-d2d5-413f-9659-20545865cdca.gif" width="800">
|
||||
</p>
|
||||
|
||||
## Autocompletion
|
||||
## Code autocompletion with nvim-cmp
|
||||
|
||||
<p align="center">
|
||||
<img src="https://user-images.githubusercontent.com/16662357/128590006-0fc1451f-fac1-49b2-bb95-8aba21bfa44e.gif" width="800">
|
||||
@@ -83,6 +103,12 @@ For more UI demos, see [here](https://github.com/jdhao/nvim-config/issues/15).
|
||||
<img src="https://user-images.githubusercontent.com/16662357/128590833-aaa05d53-19ef-441d-a5a9-ba1bbd3936c1.gif" width="800">
|
||||
</p>
|
||||
|
||||
## Command-line autocompletion with wilder.nvim
|
||||
|
||||
<p align="center">
|
||||
<img src="https://user-images.githubusercontent.com/16662357/147677787-8e5d229a-a16a-420e-98f5-88f2a1be84a2.gif" width="800">
|
||||
</p>
|
||||
|
||||
## Tags
|
||||
|
||||
<p align="center">
|
||||
@@ -97,7 +123,7 @@ Go to a string starting with `se`
|
||||
<img src="https://user-images.githubusercontent.com/16662357/139459219-8a7e6ac4-1d24-4008-a370-b56773d7cb85.gif" width="800">
|
||||
</p>
|
||||
|
||||
## GUI-style notification
|
||||
## GUI-style notification with nvim-notify
|
||||
|
||||
<p align="center">
|
||||
<img src="https://user-images.githubusercontent.com/16662357/128589873-aadb8264-1098-4834-9876-fa66a309be05.gif" width="800">
|
||||
@@ -146,6 +172,17 @@ represents ASCII character `,`.
|
||||
| `ctrl-t` | Insert | Linux/macOS/Win | Turn word under cursor to title case |
|
||||
| `jk` | Insert | Linux/macOS/Win | Return to Normal mode without lagging |
|
||||
|
||||
# Custom commands
|
||||
|
||||
In addition to commands provided by various plugins, I have also created
|
||||
several custom commands for personal use.
|
||||
|
||||
| command | description | example |
|
||||
|------------|-------------------------------------------------------------------------|--------------------------------|
|
||||
| `Redir` | capture command output to a tabpage for easier inspection. | `Redir hi` |
|
||||
| `Edit` | edit multiple files at the same time, supports globing | `Edit *.vim` |
|
||||
| `Datetime` | print current date and time or convert Unix time stamp to date and time | `Datetime 12345` or `Datetime` |
|
||||
|
||||
# Trouble shooting
|
||||
|
||||
If you come across an issue, you can first use `:checkhealth` command provided
|
||||
@@ -156,7 +193,7 @@ If you still have an issue, [open a new issue](https://github.com/jdhao/nvim-con
|
||||
|
||||
# Further readings
|
||||
|
||||
Some of the resources that I find helpful in mastering Vim is documented [here](docs/vim_resources.md).
|
||||
Some of the resources that I find helpful in mastering Vim is documented [here](docs/nvim_resources.md).
|
||||
You may also be interested in my post in configuring Vim on different platforms:
|
||||
|
||||
+ [Config nvim on Linux for Python development](https://jdhao.github.io/2018/12/24/centos_nvim_install_use_guide_en/)
|
||||
|
||||
@@ -6,8 +6,7 @@ set formatoptions-=r
|
||||
" modeline is annoying in that the modeline get executed each time the window
|
||||
" focus is lost (see
|
||||
" https://github.com/tmux-plugins/vim-tmux-focus-events/issues/14)
|
||||
set foldmethod=expr foldlevel=0 foldlevelstart=-1
|
||||
\ foldexpr=utils#VimFolds(v:lnum) foldtext=utils#MyFoldText()
|
||||
set foldmethod=expr foldexpr=utils#VimFolds(v:lnum) foldtext=utils#MyFoldText()
|
||||
|
||||
" Use :help command for keyword when pressing `K` in vim file,
|
||||
" see `:h K` and https://stackoverflow.com/q/15867323/6064933
|
||||
|
||||
@@ -174,13 +174,18 @@ endfunction
|
||||
" Redirect command output to a register for later processing.
|
||||
" Ref: https://stackoverflow.com/q/2573021/6064933 and https://unix.stackexchange.com/q/8101/221410 .
|
||||
function! utils#CaptureCommandOutput(command) abort
|
||||
let l:tmp = @m
|
||||
redir @m
|
||||
execute a:command
|
||||
silent! execute a:command
|
||||
redir END
|
||||
call v:lua.vim.notify("command output captured to register m", "info", {'title': 'nvim-config'})
|
||||
|
||||
"create a scratch buffer for dumping the text, ref: https://vi.stackexchange.com/a/11311/15292.
|
||||
tabnew | setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile
|
||||
call nvim_buf_set_lines(0, 0, 0, 0, [@m])
|
||||
|
||||
let l:lines = split(@m, '\n')
|
||||
call nvim_buf_set_lines(0, 0, 0, 0, l:lines)
|
||||
|
||||
let @m = l:tmp
|
||||
endfunction
|
||||
|
||||
" Edit all files matching the given patterns.
|
||||
@@ -193,12 +198,12 @@ function! utils#MultiEdit(patterns) abort
|
||||
endfunction
|
||||
|
||||
function! utils#add_pack(name) abort
|
||||
let l:success = v:true
|
||||
let l:status = v:true
|
||||
try
|
||||
execute printf("packadd! %s", a:name)
|
||||
catch /^Vim\%((\a\+)\)\=:E919/
|
||||
let l:success = v:false
|
||||
let l:status = v:false
|
||||
endtry
|
||||
|
||||
return l:success
|
||||
return l:status
|
||||
endfunction
|
||||
|
||||
@@ -19,13 +19,28 @@ augroup accurate_syn_highlight
|
||||
autocmd BufEnter * :syntax sync fromstart
|
||||
augroup END
|
||||
|
||||
" Return to last edit position when opening a file
|
||||
augroup resume_edit_position
|
||||
" Return to last cursor position when opening a file
|
||||
augroup resume_cursor_position
|
||||
autocmd!
|
||||
autocmd BufReadPost *
|
||||
\ if line("'\"") > 1 && line("'\"") <= line("$") && &ft !~# 'commit' | execute "normal! g`\"zvzz" | endif
|
||||
autocmd BufReadPost * call s:resume_cursor_position()
|
||||
augroup END
|
||||
|
||||
" Only resume last cursor position when there is no go-to-line command (something like '+23').
|
||||
function s:resume_cursor_position() abort
|
||||
if line("'\"") > 1 && line("'\"") <= line("$") && &ft !~# 'commit'
|
||||
let l:args = v:argv " command line arguments
|
||||
for l:cur_arg in l:args
|
||||
" Check if a go-to-line command is given.
|
||||
let idx = match(l:cur_arg, '\v^\+(\d){1,}$')
|
||||
if idx != -1
|
||||
return
|
||||
endif
|
||||
endfor
|
||||
|
||||
execute "normal! g`\"zvzz"
|
||||
endif
|
||||
endfunction
|
||||
|
||||
" Display a message when the current file is not in utf-8 format.
|
||||
" Note that we need to use `unsilent` command here because of this issue:
|
||||
" https://github.com/vim/vim/issues/4379
|
||||
|
||||
@@ -34,10 +34,13 @@ else
|
||||
endif
|
||||
|
||||
" Custom mapping <leader> (see `:h mapleader` for more info)
|
||||
let mapleader = ','
|
||||
let g:mapleader = ','
|
||||
|
||||
" Enable highlighting for lua HERE doc inside vim script
|
||||
let g:vimsyn_embed = 'l'
|
||||
|
||||
" Use English as main language
|
||||
language en_US.utf-8
|
||||
"}}
|
||||
|
||||
"{{ Disable loading certain plugins
|
||||
|
||||
@@ -45,8 +45,6 @@ nnoremap <silent> \d :<C-U>bprevious <bar> bdelete #<CR>
|
||||
|
||||
" Insert a blank line below or above current line (do not move the cursor),
|
||||
" see https://stackoverflow.com/a/16136133/6064933
|
||||
nnoremap oo :echo 'Please use <lt>space>o instead'<CR>
|
||||
nnoremap OO :echo 'Please use <lt>space>O instead'<CR>
|
||||
nnoremap <expr> <Space>o printf('m`%so<ESC>``', v:count1)
|
||||
nnoremap <expr> <Space>O printf('m`%sO<ESC>``', v:count1)
|
||||
|
||||
|
||||
@@ -37,15 +37,6 @@ let g:semshi#error_sign=v:false
|
||||
"""""""""""""""""""""""""" vlime settings """"""""""""""""""""""""""""""""
|
||||
command! -nargs=0 StartVlime call jobstart(printf("sbcl --load %s/vlime/lisp/start-vlime.lisp", g:package_home))
|
||||
|
||||
""""""""""""""""""""""""""""" settings for nvim-hlslens"""""""""""""""
|
||||
noremap <silent> n <Cmd>execute('normal! ' . v:count1 . 'nzzzv')<CR>
|
||||
\<Cmd>lua require('hlslens').start()<CR>
|
||||
noremap <silent> N <Cmd>execute('normal! ' . v:count1 . 'Nzzzv')<CR>
|
||||
\<Cmd>lua require('hlslens').start()<CR>
|
||||
|
||||
map * <Plug>(asterisk-z*)<Cmd>lua require('hlslens').start()<CR>
|
||||
map # <Plug>(asterisk-z#)<Cmd>lua require('hlslens').start()<CR>
|
||||
|
||||
"""""""""""""""""""""""""""""LeaderF settings"""""""""""""""""""""
|
||||
" Do not use cache file
|
||||
let g:Lf_UseCache = 0
|
||||
|
||||
@@ -50,6 +50,10 @@ function! s:theme_setup_dict.nightfox() dict abort
|
||||
colorscheme nordfox
|
||||
endfunction
|
||||
|
||||
function! s:theme_setup_dict.kanagawa() dict abort
|
||||
colorscheme kanagawa
|
||||
endfunction
|
||||
|
||||
" Theme to directory name mapping, because theme repo name is not necessarily
|
||||
" the same as the theme name itself.
|
||||
let s:theme2dir = {
|
||||
@@ -61,7 +65,8 @@ let s:theme2dir = {
|
||||
\ 'nord': 'nord.nvim',
|
||||
\ 'doom_one': 'doom-one.nvim',
|
||||
\ 'everforest' :'everforest',
|
||||
\ 'nightfox': 'nightfox.nvim'
|
||||
\ 'nightfox': 'nightfox.nvim',
|
||||
\ 'kanagawa': 'kanagawa.nvim',
|
||||
\ }
|
||||
|
||||
let s:theme = utils#RandElement(keys(s:theme2dir))
|
||||
@@ -73,8 +78,8 @@ if !has_key(s:theme_setup_dict, s:theme)
|
||||
finish
|
||||
endif
|
||||
|
||||
let s:res = utils#add_pack(s:theme2dir[s:theme])
|
||||
if !s:res
|
||||
let s:status = utils#add_pack(s:theme2dir[s:theme])
|
||||
if !s:status
|
||||
echomsg printf("Theme %s not installed. Run PackerSync to install.", s:theme)
|
||||
finish
|
||||
endif
|
||||
|
||||
4
init.vim
4
init.vim
@@ -1,4 +1,3 @@
|
||||
"{ Header info
|
||||
" Description: This is my personal Nvim configuration supporting Mac, Linux
|
||||
" and Windows, with various plugins configured. This configuration evolves as
|
||||
" I learn more about Nvim and becomes more proficient in using Nvim. Since it
|
||||
@@ -8,9 +7,7 @@
|
||||
" built over time with a lot of polish.
|
||||
" Author: Jie-dong Hao
|
||||
" Email: jdhao@hotmail.com
|
||||
"}
|
||||
|
||||
"{ Main configurations
|
||||
let g:config_files = [
|
||||
\ 'globals.vim',
|
||||
\ 'options.vim',
|
||||
@@ -23,4 +20,3 @@ let g:config_files = [
|
||||
for s:fname in g:config_files
|
||||
execute printf('source %s/core/%s', stdpath('config'), s:fname)
|
||||
endfor
|
||||
"}
|
||||
|
||||
21
lua/config/hlslens.lua
Normal file
21
lua/config/hlslens.lua
Normal file
@@ -0,0 +1,21 @@
|
||||
require('hlslens').setup({
|
||||
calm_down = true,
|
||||
nearest_only = true,
|
||||
})
|
||||
|
||||
vim.api.nvim_set_keymap(
|
||||
"n",
|
||||
"n",
|
||||
"<Cmd>execute('normal! ' . v:count1 . 'nzzzv')<CR><Cmd>lua require('hlslens').start()<CR>",
|
||||
{ noremap = true, silent = true }
|
||||
)
|
||||
|
||||
vim.api.nvim_set_keymap(
|
||||
"n",
|
||||
"N",
|
||||
"<Cmd>execute('normal! ' . v:count1 . 'Nzzzv')<CR><Cmd>lua require('hlslens').start()<CR>",
|
||||
{ noremap = true, silent = true }
|
||||
)
|
||||
|
||||
vim.api.nvim_set_keymap("n", "*", "<Plug>(asterisk-z*)<Cmd>lua require('hlslens').start()<CR>", { silent = true })
|
||||
vim.api.nvim_set_keymap("n", "#", "<Plug>(asterisk-z#)<Cmd>lua require('hlslens').start()<CR>", { silent = true })
|
||||
@@ -50,9 +50,9 @@ local custom_attach = function(client, bufnr)
|
||||
-- The blow command will highlight the current variable and its usages in the buffer.
|
||||
if client.resolved_capabilities.document_highlight then
|
||||
vim.cmd([[
|
||||
hi link LspReferenceRead Visual
|
||||
hi link LspReferenceText Visual
|
||||
hi link LspReferenceWrite Visual
|
||||
hi! link LspReferenceRead Visual
|
||||
hi! link LspReferenceText Visual
|
||||
hi! link LspReferenceWrite Visual
|
||||
augroup lsp_document_highlight
|
||||
autocmd! * <buffer>
|
||||
autocmd CursorHold <buffer> lua vim.lsp.buf.document_highlight()
|
||||
|
||||
@@ -6,6 +6,18 @@ local function spell()
|
||||
return ""
|
||||
end
|
||||
|
||||
local function ime_state()
|
||||
if vim.g.is_mac then
|
||||
-- ref: https://github.com/vim-airline/vim-airline/blob/master/autoload/airline/extensions/xkblayout.vim#L11
|
||||
local layout = vim.fn.libcall(vim.g.XkbSwitchLib, 'Xkb_Switch_getXkbLayout', '')
|
||||
if layout == '0' then
|
||||
return '[CN]'
|
||||
end
|
||||
end
|
||||
|
||||
return ""
|
||||
end
|
||||
|
||||
local function trailing_space()
|
||||
-- Get the positions of trailing whitespaces from plugin 'jdhao/whitespace.nvim'.
|
||||
local trailing_space_pos = vim.b.trailing_whitespace_pos
|
||||
@@ -59,11 +71,15 @@ require("lualine").setup({
|
||||
lualine_a = { "mode" },
|
||||
lualine_b = { "branch", "diff" },
|
||||
lualine_c = {
|
||||
"filename",
|
||||
{
|
||||
ime_state,
|
||||
color = {fg = 'black', bg = '#f46868'}
|
||||
},
|
||||
{
|
||||
spell,
|
||||
color = {fg = 'black', bg = '#a7c080'}
|
||||
},
|
||||
"filename"
|
||||
},
|
||||
lualine_x = {
|
||||
"encoding",
|
||||
@@ -82,7 +98,7 @@ require("lualine").setup({
|
||||
"location",
|
||||
{
|
||||
"diagnostics",
|
||||
sources = { "nvim_lsp" }
|
||||
sources = { "nvim_diagnostic" }
|
||||
},
|
||||
{
|
||||
trailing_space,
|
||||
|
||||
@@ -37,10 +37,6 @@ require("packer").startup({
|
||||
|
||||
-- nvim-cmp completion sources
|
||||
use {"hrsh7th/cmp-nvim-lsp", after = "nvim-cmp"}
|
||||
|
||||
-- nvim-lsp configuration (it relies on cmp-nvim-lsp, so it should be loaded after cmp-nvim-lsp).
|
||||
use({ "neovim/nvim-lspconfig", after = "cmp-nvim-lsp", config = [[require('config.lsp')]] })
|
||||
|
||||
use {"hrsh7th/cmp-nvim-lua", after = "nvim-cmp"}
|
||||
use {"hrsh7th/cmp-path", after = "nvim-cmp"}
|
||||
use {"hrsh7th/cmp-buffer", after = "nvim-cmp"}
|
||||
@@ -50,15 +46,13 @@ require("packer").startup({
|
||||
use {"hrsh7th/cmp-emoji", after = 'nvim-cmp'}
|
||||
end
|
||||
|
||||
-- nvim-lsp configuration (it relies on cmp-nvim-lsp, so it should be loaded after cmp-nvim-lsp).
|
||||
use({ "neovim/nvim-lspconfig", after = "cmp-nvim-lsp", config = [[require('config.lsp')]] })
|
||||
|
||||
if vim.g.is_mac then
|
||||
use({ "nvim-treesitter/nvim-treesitter", event = 'BufEnter', run = ":TSUpdate", config = [[require('config.treesitter')]] })
|
||||
end
|
||||
|
||||
-- Python syntax highlighting and more
|
||||
if vim.g.is_win then
|
||||
use({ "numirias/semshi", ft = "python", config = "vim.cmd [[UpdateRemotePlugins]]" })
|
||||
end
|
||||
|
||||
-- Python indent (follows the PEP8 style)
|
||||
use({ "Vimjas/vim-python-pep8-indent", ft = { "python" } })
|
||||
|
||||
@@ -83,10 +77,15 @@ require("packer").startup({
|
||||
}
|
||||
|
||||
-- Clear highlight search automatically for you
|
||||
use({"romainl/vim-cool", event = "VimEnter"})
|
||||
-- use({"romainl/vim-cool", event = "VimEnter"})
|
||||
|
||||
-- Show match number for search
|
||||
use {'kevinhwang91/nvim-hlslens', branch = 'main', event = "VimEnter"}
|
||||
-- Show match number and index for searching
|
||||
use {
|
||||
'kevinhwang91/nvim-hlslens',
|
||||
branch = 'main',
|
||||
keys = {{'n', '*'}, {'n', '#'}, {'n', 'n'}, {'n', 'N'}},
|
||||
config = [[require('config.hlslens')]]
|
||||
}
|
||||
|
||||
-- Stay after pressing * and search selected text
|
||||
use({"haya14busa/vim-asterisk", event = 'VimEnter'})
|
||||
@@ -124,15 +123,18 @@ require("packer").startup({
|
||||
use({"NTBBloodbath/doom-one.nvim", opt = true})
|
||||
use({"sainnhe/everforest", opt = true})
|
||||
use({"EdenEast/nightfox.nvim", opt = true})
|
||||
use({"rebelot/kanagawa.nvim", opt = true})
|
||||
|
||||
-- Show git change (change, delete, add) signs in vim sign column
|
||||
use({"mhinz/vim-signify", event = 'BufEnter'})
|
||||
-- Another similar plugin
|
||||
-- use 'airblade/vim-gitgutter'
|
||||
|
||||
use {'kyazdani42/nvim-web-devicons', event = 'VimEnter'}
|
||||
|
||||
use {
|
||||
'nvim-lualine/lualine.nvim', event = 'VimEnter',
|
||||
requires = {'kyazdani42/nvim-web-devicons', opt = true},
|
||||
'nvim-lualine/lualine.nvim',
|
||||
event = 'VimEnter',
|
||||
config = [[require('config.statusline')]]
|
||||
}
|
||||
|
||||
@@ -143,6 +145,7 @@ require("packer").startup({
|
||||
|
||||
use({
|
||||
"lukas-reineke/indent-blankline.nvim",
|
||||
event = 'VimEnter',
|
||||
config = [[require('config.indent-blankline')]]
|
||||
})
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ snippet k3 "Three key strokes shortcut"
|
||||
<kbd>${1:KEY}</kbd> + <kbd>${2:KEY}</kbd> + <kbd>${3:KEY}</kbd>
|
||||
endsnippet
|
||||
|
||||
snippet "meta" "Markdown front matter (YAML format)" b
|
||||
snippet meta "Markdown front matter (YAML format)" b
|
||||
---
|
||||
title: "$1"
|
||||
date: `!p from datetime import datetime
|
||||
|
||||
@@ -345,3 +345,13 @@ teardown
|
||||
github
|
||||
fastgit
|
||||
EOL
|
||||
PyCharm
|
||||
deduplication
|
||||
STL
|
||||
delimitMate
|
||||
lspconfig
|
||||
lualine
|
||||
Keymap
|
||||
iCloud
|
||||
keyframe
|
||||
maskRCNN
|
||||
|
||||
Reference in New Issue
Block a user