https://github.com/zheaoli/neovim
https://github.com/zheaoli/neovim
Last synced: 7 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/zheaoli/neovim
- Owner: Zheaoli
- License: mit
- Created: 2022-11-26T09:09:26.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2022-11-27T18:50:56.000Z (almost 3 years ago)
- Last Synced: 2025-01-16T10:36:21.020Z (9 months ago)
- Language: Lua
- Size: 68.4 KB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
![]()
Cosynvim
![]()
![]()
## What is Cosynvim
Many people are interested in my [personal configuration](https://github.com/glepnir/nvim). So I created Cosynvim.
What does Cosynvim do? Cosynvim wants vimers to have their own config with high performance
fast speed and modernity.
## Structure
```
├── init.lua
├── lua
│ ├── core heart of cosynvim provide api
│ │ ├── init.lua
│ │ ├── keymap.lua keymap api
│ │ ├── options.lua vim options
│ │ └── pack.lua hack packer
│ ├── keymap your keymap in here
│ │ ├── config.lua
│ │ └── init.lua
│ └── modules plugins module usage example
│ ├── completion
│ │ ├── config.lua
│ │ └── plugins.lua
│ ├── lang
│ │ ├── config.lua
│ │ └── plugins.lua
│ ├── tools
│ │ ├── config.lua
│ │ └── plugins.lua
│ └── ui
│ ├── config.lua
│ ├── eviline.lua
│ └── plugins.lua
├── snippets snippets
│ ├── lua.json
│ └── package.json
└── static dashboard logo
└── neovim.cat```
A nice structure right ? Looks complicated ? You can delete any folder except core and keymap modules. The
rule of `modules` is you can delete folders in modules. And create folder with your favorite name, but you must
create `plugins.lua` and register your plugins in this file by using cosynvim api.
## Usage
- Click button `Use this template` It will genereate a new repo based on cosy on your github
- Then you need input repo name, Give your nvim configuration a nice name
- Enjoy
### How to install plugins
Api is `require('core.pack').register_plugin`. So pass plugin as param into this function. Usage
like in `modules/your-folder-name/plugins.lua`
```lua
local plugin = require('core.pack').register_plugin
local conf = require('modules.ui.config')plugin {'glepnir/zephyr-nvim', config = conf.zephyr}
plugin {'plugin github repo name'}
```what is `config` . This is a keyword of [packer.nvim](https://github.com/wbthomason/packer.nvim), you need to check the doc of packer to know how to use packer.
If a plugin has many configs you can create other file in `modules/your-folder-name/config.lua` avoid
making theplugins.lua file too long. Recommend lazyload plugins. Check the usage in `modules` , it will improve your neovim
start speed. `lazyload` is not magic, it just generate your config into some `autocmds` , you can check the
`packer_compiled.lua` to check it. I don't like the default path config in packer it use `plugins` folder So i set
compiled file path to `~/.local/share/nvim/site/lua`, you can find compiled file in this path. Use `:h autocmd`
to know more about. When you edit the config and open neovim and it does not take effect. Please try
`PackerCompile` to generate a new compile file with your new change. In my personal config i have a function that
can auto compiled . when i edit the lua file that in this path `~/.config/nvim`. But it will make some noise so I didn't
use it in cosynvim. when i have a newimplement I will update it to cosynvim core.
```lua
-- modules/completion/plugins.lua
plugin {'neovim/nvim-lspconfig',
-- used filetype to lazyload lsp
-- config your language filetype in here
ft = { 'lua','rust','c','cpp'},
config = conf.nvim_lsp,
}-- modules/tools/plugins.lua
plugin {'nvim-telescope/telescope.nvim',
-- use command to lazyload.
cmd = 'Telescope',
config = conf.telescope,
requires = {
{'nvim-lua/popup.nvim', opt = true},
{'nvim-lua/plenary.nvim',opt = true},
{'nvim-telescope/telescope-fzy-native.nvim',opt = true},
}
}
```### How to config keymap
In cosynvim there are some apis that make it easy to set keymap. All apis are defined in `core/keymap.lua`.
```lua
keymap.(n/i/c/v/x/t)map -- function to generate keymap by vim.keymap.set
keymap.new_opts -- generate opts into vim.keymap.set
-- function type that work with keymap.new_opts
keymap.silent keymap.noremap keymap.expr keymap.nowait keymap.remap
keymap.cmd -- just return string with and
keymap.cu -- work like cmd but for visual map
```Use these apis to config your keymap in `keymap` folder. In this folder `keymap/init.lua` is necessary but if you
have many vim mode remap you can config them in `keymap/other-file.lua` in cosynvim is `config.lua` just an
example file. Then config plugins keymap in `keymap/init.lua`. the example of api usage
```lua
-- genreate keymap in noremal mode
nmap {
-- packer
{'pu',cmd('PackerUpdate'),opts(noremap,silent,'Packer update')},
{'pi',cmd('PackerInstall'),opts(noremap,silent)},
{'pc',cmd('PackerCompile'),opts(noremap,silent)},
}
````map` foreach every table and generate a new table that can pass to `vim.keymap.set`. `cmd('PackerUpdate')` just
return a string `PackerUpdate` as rhs. lhs is `pu>`, `opts(noremap,silent,'Packer update')` generate options table
`{noremap = true,silent = true, desc = 'Packer Update' }` . for some vim mode remap. not need use `cmd` function. oh maybe you will be
confused what is `` check `:h ` you will get answer
```lua
-- window jump
{"",'h',opts(noremap)},
```also you can pass a table not include sub table to `map` like
```lua
nmap {'key','rhs',opts(noremap,silent)}
```use `:h vim.keymap.set` to know more about.
## Tips
- Improve key repeat
```
mac os need restart
defaults write NSGlobalDomain KeyRepeat -int 1
defaults write NSGlobalDomain InitialKeyRepeat -int 10linux
xset r rate 210 40
```## Donate
[](https://paypal.me/bobbyhub)
If you'd like to support my work financially, buy me a drink through [paypal](https://paypal.me/bobbyhub)
## Licenese MIT