mirror of
https://github.com/jdhao/nvim-config.git
synced 2025-06-08 14:14:33 +02:00
Compare commits
27 Commits
v0.7.2
...
84d73660fa
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
84d73660fa | ||
|
|
a9cc10b2ef | ||
|
|
cad6112cc2 | ||
|
|
4d7fd6580a | ||
|
|
f492a94db6 | ||
|
|
0c92d9a018 | ||
|
|
369687b047 | ||
|
|
54908dfe9f | ||
|
|
2e5f5c5991 | ||
|
|
8291b15599 | ||
|
|
3de31f7d0a | ||
|
|
6b59c268f9 | ||
|
|
dd550dc3d0 | ||
|
|
3aae07df56 | ||
|
|
ed5ddf60cc | ||
|
|
bcdc8d3f66 | ||
|
|
5498a05bf7 | ||
|
|
644f8b6e2d | ||
|
|
3af7dd51b8 | ||
|
|
e0fc068f2e | ||
|
|
58ed71f870 | ||
|
|
aae9a7b7a7 | ||
|
|
33270f3257 | ||
|
|
99d5a0343b | ||
|
|
3678da1b3c | ||
|
|
a8fdbf3573 | ||
|
|
351ba5fc63 |
6
.stylua.toml
Normal file
6
.stylua.toml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
# config for stylua, ref: https://github.com/JohnnyMorganz/StyLua
|
||||||
|
line_endings = "Unix"
|
||||||
|
indent_type = "Spaces"
|
||||||
|
indent_width = 2
|
||||||
|
quote_style = "AutoPreferDouble"
|
||||||
|
no_call_parentheses = true
|
||||||
85
README.md
85
README.md
@@ -88,16 +88,16 @@ and how to set up on different platforms (Linux, macOS, and Windows).
|
|||||||
|
|
||||||
For more UI demos, check [here](https://github.com/jdhao/nvim-config/issues/15).
|
For more UI demos, check [here](https://github.com/jdhao/nvim-config/issues/15).
|
||||||
|
|
||||||
## Start screen with alpha-nvim
|
## Start screen with dashboard-nvim
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="https://user-images.githubusercontent.com/16662357/139459989-0537ded4-c119-4749-99bf-b551ca1ba118.jpg" width="800">
|
<img src="https://user-images.githubusercontent.com/16662357/183256752-fb23b215-a6b8-4646-beed-9999f52d53f1.png" width="800">
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
## fuzzy finding using LeaderF
|
## File fuzzy finding using LeaderF
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="https://user-images.githubusercontent.com/16662357/139462025-7bce98c5-d2d5-413f-9659-20545865cdca.gif" width="800">
|
<img src="https://user-images.githubusercontent.com/16662357/183257017-2d9d7605-3c4b-4e1d-8955-30998f9b6f28.gif" width="800">
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
## Code autocompletion with nvim-cmp
|
## Code autocompletion with nvim-cmp
|
||||||
@@ -142,43 +142,46 @@ Go to a string starting with `se`
|
|||||||
|
|
||||||
Some of the shortcuts I use frequently are listed here. In the following shortcuts, `<leader>` represents ASCII character `,`.
|
Some of the shortcuts I use frequently are listed here. In the following shortcuts, `<leader>` represents ASCII character `,`.
|
||||||
|
|
||||||
| Shortcut | Mode | platform | Description |
|
| Shortcut | Mode | platform | Description |
|
||||||
|-------------------|---------------|-----------------|------------------------------------------------------------------|
|
|-------------------|---------------|-----------------|--------------------------------------------------------------------------|
|
||||||
| `<leader>ff` | Normal | Linux/macOS/Win | Fuzzy file searching in a floating window |
|
| `<leader>ff` | Normal | Linux/macOS/Win | Fuzzy file searching in a floating window |
|
||||||
| `<leader>fh` | Normal | Linux/macOS/Win | Fuzzy help file grepping in a floating window |
|
| `<leader>fh` | Normal | Linux/macOS/Win | Fuzzy help file grepping in a floating window |
|
||||||
| `<leader>fg` | Normal | Linux/macOS/Win | Fuzzy project-wide grepping in a floating window |
|
| `<leader>fg` | Normal | Linux/macOS/Win | Fuzzy project-wide grepping in a floating window |
|
||||||
| `<leader>ft` | Normal | Linux/macOS/Win | Fuzzy buffer tag searching in a floating window |
|
| `<leader>ft` | Normal | Linux/macOS/Win | Fuzzy buffer tag searching in a floating window |
|
||||||
| `<leader>fb` | Normal | Linux/macOS/Win | Fuzzy buffer switching in a floating window |
|
| `<leader>fb` | Normal | Linux/macOS/Win | Fuzzy buffer switching in a floating window |
|
||||||
| `<leader><Space>` | Normal | Linux/macOS/Win | Remove trailing white spaces |
|
| `<leader><Space>` | Normal | Linux/macOS/Win | Remove trailing white spaces |
|
||||||
| `<leader>v` | Normal | Linux/macOS/Win | Reselect last pasted text |
|
| `<leader>v` | Normal | Linux/macOS/Win | Reselect last pasted text |
|
||||||
| `<leader>ev` | Normal | Linux/macOS/Win | Edit Nvim config in a new tabpage |
|
| `<leader>ev` | Normal | Linux/macOS/Win | Edit Nvim config in a new tabpage |
|
||||||
| `<leader>sv` | Normal | Linux/macOS/Win | Reload Nvim config |
|
| `<leader>sv` | Normal | Linux/macOS/Win | Reload Nvim config |
|
||||||
| `<leader>st` | Normal | Linux/macOS/Win | Show highlight group for cursor text |
|
| `<leader>st` | Normal | Linux/macOS/Win | Show highlight group for cursor text |
|
||||||
| `<leader>q` | Normal | Linux/macOS/Win | Quit current window |
|
| `<leader>q` | Normal | Linux/macOS/Win | Quit current window |
|
||||||
| `<leader>Q` | Normal | Linux/macOS/Win | Quit all window and close Nvim |
|
| `<leader>Q` | Normal | Linux/macOS/Win | Quit all window and close Nvim |
|
||||||
| `<leader>w` | Normal | Linux/macOS/Win | Save current buffer content |
|
| `<leader>w` | Normal | Linux/macOS/Win | Save current buffer content |
|
||||||
| `<leader>y` | Normal | Linux/macOS/Win | Copy the content of entire buffer to default register |
|
| `<leader>y` | Normal | Linux/macOS/Win | Copy the content of entire buffer to default register |
|
||||||
| `<leader>cl` | Normal | Linux/macOS/Win | Toggle cursor column |
|
| `<leader>cl` | Normal | Linux/macOS/Win | Toggle cursor column |
|
||||||
| `<leader>cd` | Normal | Linux/macOS/Win | Change current working directory to to the dir of current buffer |
|
| `<leader>cd` | Normal | Linux/macOS/Win | Change current working directory to to the dir of current buffer |
|
||||||
| `<space>t` | Normal | Linux/macOS/Win | Toggle tag window (show project tags in the right window) |
|
| `<space>t` | Normal | Linux/macOS/Win | Toggle tag window (show project tags in the right window) |
|
||||||
| `<leader>gs` | Normal | Linux/macOS/Win | Show Git status result |
|
| `<leader>gs` | Normal | Linux/macOS/Win | Show Git status result |
|
||||||
| `<leader>gw` | Normal | Linux/macOS/Win | Run Git add for current file |
|
| `<leader>gw` | Normal | Linux/macOS/Win | Run Git add for current file |
|
||||||
| `<leader>gd` | Normal | Linux/macOS/Win | Run git diff for current file |
|
| `<leader>gd` | Normal | Linux/macOS/Win | Run git diff for current file |
|
||||||
| `<leader>gc` | Normal | Linux/macOS/Win | Run git commit |
|
| `<leader>gc` | Normal | Linux/macOS/Win | Run git commit |
|
||||||
| `<leader>gpl` | Normal | Linux/macOS/Win | Run git pull |
|
| `<leader>gpl` | Normal | Linux/macOS/Win | Run git pull |
|
||||||
| `<leader>gpu` | Normal | Linux/macOS/Win | Run git push |
|
| `<leader>gpu` | Normal | Linux/macOS/Win | Run git push |
|
||||||
| `<F9>` | Normal | Linux/macOS/Win | Run current source file (for Python, C++) |
|
| `<F9>` | Normal | Linux/macOS/Win | Compile&run current source file (for C++, LaTeX, Lua, Python) |
|
||||||
| `<F11>` | Normal | Linux/macOS/Win | Toggle spell checking |
|
| `<F11>` | Normal | Linux/macOS/Win | Toggle spell checking |
|
||||||
| `<F12>` | Normal | Linux/macOS/Win | Toggle paste mode |
|
| `<F12>` | Normal | Linux/macOS/Win | Toggle paste mode |
|
||||||
| `\x` | Normal | Linux/macOS/Win | Close location or quickfix window |
|
| `\x` | Normal | Linux/macOS/Win | Close location or quickfix window |
|
||||||
| `\d` | Normal | Linux/macOS/Win | Close current buffer and go to previous buffer |
|
| `\d` | Normal | Linux/macOS/Win | Close current buffer and go to previous buffer |
|
||||||
| `{count}gb` | Normal | Linux/macOS/Win | Go to buffer {count} or next buffer in the buffer list. |
|
| `{count}gb` | Normal | Linux/macOS/Win | Go to buffer `{count}` or next buffer in the buffer list. |
|
||||||
| `Alt-m` | Normal | macOS/Win | Markdown previewing in system browser |
|
| `{operator}iB` | Normal | Linux/macOS/Win | Operate in the whole buffer, `{operator}` can be `v`, `y`, `c`, `d` etc. |
|
||||||
| `Alt-Shift-m` | Normal | macOS/Win | Stopping Markdown previewing in system browser |
|
| `Alt-k` | Normal | Linux/macOS/Win | Move current line or selected lines up |
|
||||||
| `ob` | Normal/Visual | macOS/Win | Open link under cursor or search visual selection |
|
| `Alt-j` | Normal | Linux/macOS/Win | Move current line or selected lines down |
|
||||||
| `ctrl-u` | Insert | Linux/macOS/Win | Turn word under cursor to upper case |
|
| `Alt-m` | Normal | macOS/Win | Markdown previewing in system browser |
|
||||||
| `ctrl-t` | Insert | Linux/macOS/Win | Turn word under cursor to title case |
|
| `Alt-Shift-m` | Normal | macOS/Win | Stopping Markdown previewing in system browser |
|
||||||
| `jk` | Insert | Linux/macOS/Win | Return to Normal mode without lagging |
|
| `ob` | Normal/Visual | macOS/Win | Open link under cursor or search visual selection |
|
||||||
|
| `ctrl-u` | Insert | Linux/macOS/Win | Turn word under cursor to upper case |
|
||||||
|
| `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
|
# Custom commands
|
||||||
|
|
||||||
|
|||||||
8
after/ftplugin/javascript.vim
Normal file
8
after/ftplugin/javascript.vim
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
" Disable inserting comment leader after hitting o or O or <Enter>
|
||||||
|
set formatoptions-=o
|
||||||
|
set formatoptions-=r
|
||||||
|
|
||||||
|
set tabstop=2 " number of visual spaces per TAB
|
||||||
|
set softtabstop=2 " number of spaces in tab when editing
|
||||||
|
set shiftwidth=2 " number of spaces to use for autoindent
|
||||||
|
set expandtab " expand tab to spaces so that tabs are spaces
|
||||||
@@ -131,9 +131,11 @@ function! utils#Get_titlestr() abort
|
|||||||
if g:is_linux
|
if g:is_linux
|
||||||
let l:title_str = hostname() . ' '
|
let l:title_str = hostname() . ' '
|
||||||
endif
|
endif
|
||||||
let l:title_str = l:title_str . expand('%:p:~') . ' '
|
|
||||||
if &buflisted
|
let l:buf_path = expand('%:p:~')
|
||||||
let l:title_str = l:title_str . strftime('%Y-%m-%d %H:%M',getftime(expand('%')))
|
let l:title_str = l:title_str . l:buf_path . ' '
|
||||||
|
if &buflisted && l:buf_path != ""
|
||||||
|
let l:title_str = l:title_str . strftime('%Y-%m-%d %H:%M:%S%z', getftime(expand('%')))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
return l:title_str
|
return l:title_str
|
||||||
|
|||||||
@@ -37,7 +37,9 @@ let g:mapleader = ','
|
|||||||
let g:vimsyn_embed = 'l'
|
let g:vimsyn_embed = 'l'
|
||||||
|
|
||||||
" Use English as main language
|
" Use English as main language
|
||||||
language en_US.utf-8
|
if !g:is_mac
|
||||||
|
language en_US.utf-8
|
||||||
|
endif
|
||||||
|
|
||||||
" use filetype.lua instead of filetype.vim
|
" use filetype.lua instead of filetype.vim
|
||||||
let g:do_filetype_lua = 1
|
let g:do_filetype_lua = 1
|
||||||
|
|||||||
@@ -101,10 +101,6 @@ nnoremap / /\v
|
|||||||
" Search in selected region
|
" Search in selected region
|
||||||
xnoremap / :<C-U>call feedkeys('/\%>'.(line("'<")-1).'l\%<'.(line("'>")+1)."l")<CR>
|
xnoremap / :<C-U>call feedkeys('/\%>'.(line("'<")-1).'l\%<'.(line("'>")+1)."l")<CR>
|
||||||
|
|
||||||
" Find and replace (like Sublime Text 3)
|
|
||||||
nnoremap <C-H> :%s/
|
|
||||||
xnoremap <C-H> :s/
|
|
||||||
|
|
||||||
" Change current working directory locally and print cwd after that,
|
" Change current working directory locally and print cwd after that,
|
||||||
" see https://vim.fandom.com/wiki/Set_working_directory_to_the_current_file
|
" see https://vim.fandom.com/wiki/Set_working_directory_to_the_current_file
|
||||||
nnoremap <silent> <leader>cd :<C-U>lcd %:p:h<CR>:pwd<CR>
|
nnoremap <silent> <leader>cd :<C-U>lcd %:p:h<CR>:pwd<CR>
|
||||||
@@ -171,6 +167,7 @@ onoremap <silent> iB :<C-U>call text_obj#Buffer()<CR>
|
|||||||
|
|
||||||
" Do not move my cursor when joining lines.
|
" Do not move my cursor when joining lines.
|
||||||
nnoremap J mzJ`z
|
nnoremap J mzJ`z
|
||||||
|
nnoremap gJ mzgJ`z
|
||||||
|
|
||||||
" Break inserted text into smaller undo units.
|
" Break inserted text into smaller undo units.
|
||||||
for ch in [',', '.', '!', '?', ';', ':']
|
for ch in [',', '.', '!', '?', ';', ':']
|
||||||
|
|||||||
@@ -112,6 +112,9 @@ set shortmess+=c
|
|||||||
" choice, IMHO.
|
" choice, IMHO.
|
||||||
set shortmess+=S
|
set shortmess+=S
|
||||||
|
|
||||||
|
" Disable showing intro message (:intro)
|
||||||
|
set shortmess+=I
|
||||||
|
|
||||||
" Completion behaviour
|
" Completion behaviour
|
||||||
" set completeopt+=noinsert " Auto select the first completion entry
|
" set completeopt+=noinsert " Auto select the first completion entry
|
||||||
set completeopt+=menuone " Show menu even if there is only one item
|
set completeopt+=menuone " Show menu even if there is only one item
|
||||||
@@ -120,7 +123,7 @@ set completeopt-=preview " Disable the preview window
|
|||||||
set pumheight=10 " Maximum number of items to show in popup menu
|
set pumheight=10 " Maximum number of items to show in popup menu
|
||||||
set pumblend=10 " pseudo transparency for completion menu
|
set pumblend=10 " pseudo transparency for completion menu
|
||||||
|
|
||||||
set winblend=5 " pseudo transparency for floating window
|
set winblend=0 " pseudo transparency for floating window
|
||||||
|
|
||||||
" Insert mode key word completion setting
|
" Insert mode key word completion setting
|
||||||
set complete+=kspell complete-=w complete-=b complete-=u complete-=t
|
set complete+=kspell complete-=w complete-=b complete-=u complete-=t
|
||||||
|
|||||||
@@ -425,3 +425,6 @@ function! s:wilder_init() abort
|
|||||||
echohl Error |echomsg "Wilder.nvim missing: run :PackerSync to fix."|echohl None
|
echohl Error |echomsg "Wilder.nvim missing: run :PackerSync to fix."|echohl None
|
||||||
endtry
|
endtry
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
""""""""""""""""""""""""""""""vim-auto-save settings""""""""""""""""""""""""""""""
|
||||||
|
let g:auto_save = 1 " enable AutoSave on Vim startup
|
||||||
|
|||||||
@@ -54,6 +54,13 @@ function! s:theme_setup_dict.kanagawa() dict abort
|
|||||||
colorscheme kanagawa
|
colorscheme kanagawa
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! s:theme_setup_dict.catppuccin() dict abort
|
||||||
|
let g:catppuccin_flavour = "frappe" " latte, frappe, macchiato, mocha
|
||||||
|
|
||||||
|
lua require("catppuccin").setup()
|
||||||
|
colorscheme catppuccin
|
||||||
|
endfunction
|
||||||
|
|
||||||
" Theme to directory name mapping, because theme repo name is not necessarily
|
" Theme to directory name mapping, because theme repo name is not necessarily
|
||||||
" the same as the theme name itself.
|
" the same as the theme name itself.
|
||||||
let s:theme2dir = {
|
let s:theme2dir = {
|
||||||
@@ -67,6 +74,7 @@ let s:theme2dir = {
|
|||||||
\ 'everforest' :'everforest',
|
\ 'everforest' :'everforest',
|
||||||
\ 'nightfox': 'nightfox.nvim',
|
\ 'nightfox': 'nightfox.nvim',
|
||||||
\ 'kanagawa': 'kanagawa.nvim',
|
\ 'kanagawa': 'kanagawa.nvim',
|
||||||
|
\ 'catppuccin': 'catppuccin'
|
||||||
\ }
|
\ }
|
||||||
|
|
||||||
let s:theme = utils#RandElement(keys(s:theme2dir))
|
let s:theme = utils#RandElement(keys(s:theme2dir))
|
||||||
@@ -85,7 +93,7 @@ if !s:status
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
execute 'call ' . s:colorscheme_func
|
execute 'call ' . s:colorscheme_func
|
||||||
if g:logging_level == 'info'
|
if g:logging_level == 'debug'
|
||||||
let s:msg1 = "Colorscheme: " . s:theme
|
let s:msg1 = "Colorscheme: " . s:theme
|
||||||
call v:lua.vim.notify(s:msg1, 'info', {'title': 'nvim-config'})
|
call v:lua.vim.notify(s:msg1, 'info', {'title': 'nvim-config'})
|
||||||
endif
|
endif
|
||||||
|
|||||||
100
docs/README.md
100
docs/README.md
@@ -2,9 +2,44 @@ This doc summarizes how to install and use this configuration in detail.
|
|||||||
|
|
||||||
# Pre-requisite
|
# Pre-requisite
|
||||||
|
|
||||||
|
## Terminal emulators
|
||||||
|
|
||||||
|
Which [terminal emulator](https://en.wikipedia.org/wiki/Terminal_emulator) we choose to use greatly affects the appearance and features of Nvim.
|
||||||
|
Since Nvim supports true colors, terminals that support true colors are preferred.
|
||||||
|
For a list of terminals that support true colors, see [here](https://github.com/termstandard/colors).
|
||||||
|
|
||||||
|
For macOS, we can use [kitty](https://sw.kovidgoyal.net/kitty/), [iterm2](https://www.iterm2.com/), [wezterm](https://wezfurlong.org/wezterm/) or [Alacritty](https://github.com/jwilm/alacritty).
|
||||||
|
|
||||||
|
If you ssh to Linux server on Windows, I recommend [wsltty](https://github.com/mintty/wsltty) and [Cygwin](https://www.cygwin.com/),
|
||||||
|
both of them use [mintty](https://github.com/mintty/mintty) as the terminal emulator.
|
||||||
|
For the latest version of Windows 10, you can also try [Windows Terminal](https://github.com/microsoft/terminal).
|
||||||
|
|
||||||
|
## Patched Fonts
|
||||||
|
|
||||||
|
Since statusline or file explorer plugins often use Unicode symbols not available in normal font,
|
||||||
|
we need to install a patched font from the [nerd-fonts](https://github.com/ryanoasis/nerd-fonts) project.
|
||||||
|
|
||||||
|
# Automatic installation
|
||||||
|
|
||||||
|
## Automatic Installation for Linux
|
||||||
|
|
||||||
|
To set up a workable Nvim environment on Linux,
|
||||||
|
I use [a bash script](nvim_setup_linux.sh) to automatically install necessary dependencies, Nvim itself and configs.
|
||||||
|
|
||||||
|
Note that the variable `PYTHON_INSTALLED`, `SYSTEM_PYTHON` and `ADD_TO_SYSTEM_PATH` in the script
|
||||||
|
should be set properly based on your environment.
|
||||||
|
|
||||||
|
## Automatic installation for Windows
|
||||||
|
|
||||||
|
Run script [nvim_setup_windows.ps1](nvim_setup_windows.ps1) under PowerShell.
|
||||||
|
|
||||||
|
# Manual install
|
||||||
|
|
||||||
There are a few dependencies if we want to use Nvim for efficient editing and development work.
|
There are a few dependencies if we want to use Nvim for efficient editing and development work.
|
||||||
|
|
||||||
## Python
|
## Dependencies
|
||||||
|
|
||||||
|
### Python
|
||||||
|
|
||||||
A lot of Nvim plugins are mainly written in Python, so we must install Python 3.
|
A lot of Nvim plugins are mainly written in Python, so we must install Python 3.
|
||||||
The easiest way to install is via [Anaconda](https://docs.anaconda.com/anaconda/install/index.html) or [Miniconda](https://docs.conda.io/en/latest/miniconda.html).
|
The easiest way to install is via [Anaconda](https://docs.anaconda.com/anaconda/install/index.html) or [Miniconda](https://docs.conda.io/en/latest/miniconda.html).
|
||||||
@@ -12,7 +47,7 @@ The easiest way to install is via [Anaconda](https://docs.anaconda.com/anaconda/
|
|||||||
After installation, make sure that you can run `python --version`,
|
After installation, make sure that you can run `python --version`,
|
||||||
and that the output should be Python 3.x.
|
and that the output should be Python 3.x.
|
||||||
|
|
||||||
## Pynvim
|
### Pynvim
|
||||||
|
|
||||||
Nvim relies on [pynvim](https://github.com/neovim/pynvim) to communicate with plugins that utilize its Python binding.
|
Nvim relies on [pynvim](https://github.com/neovim/pynvim) to communicate with plugins that utilize its Python binding.
|
||||||
Pynvim is required by plugins such as [wilder.nvim](https://github.com/gelguy/wilder.nvim).
|
Pynvim is required by plugins such as [wilder.nvim](https://github.com/gelguy/wilder.nvim).
|
||||||
@@ -21,7 +56,7 @@ Pynvim is required by plugins such as [wilder.nvim](https://github.com/gelguy/wi
|
|||||||
pip install -U pynvim
|
pip install -U pynvim
|
||||||
```
|
```
|
||||||
|
|
||||||
## python-lsp-server
|
### python-lsp-server
|
||||||
|
|
||||||
[python-lsp-server (pylsp)](https://github.com/python-lsp/python-lsp-server) is a Python [Language Server](https://microsoft.github.io/language-server-protocol/) for completion, linting, go to definition, etc.
|
[python-lsp-server (pylsp)](https://github.com/python-lsp/python-lsp-server) is a Python [Language Server](https://microsoft.github.io/language-server-protocol/) for completion, linting, go to definition, etc.
|
||||||
|
|
||||||
@@ -33,7 +68,7 @@ Note the executable for pylsp is also named `pylsp`. You need to set its PATH co
|
|||||||
If you use pip from Anaconda, the executable path may be something like `$CONDA_ROOT/bin/pylsp`.
|
If you use pip from Anaconda, the executable path may be something like `$CONDA_ROOT/bin/pylsp`.
|
||||||
For native python, the path for pylsp may be like `$HOME/.local/bin/pylsp`
|
For native python, the path for pylsp may be like `$HOME/.local/bin/pylsp`
|
||||||
|
|
||||||
## Node
|
### Node
|
||||||
|
|
||||||
We need to install node.js from [here](https://nodejs.org/en/download/).
|
We need to install node.js from [here](https://nodejs.org/en/download/).
|
||||||
For Linux, you can use the following script:
|
For Linux, you can use the following script:
|
||||||
@@ -60,7 +95,7 @@ source ~/.bash_profile
|
|||||||
# source ~/.zshrc
|
# source ~/.zshrc
|
||||||
```
|
```
|
||||||
|
|
||||||
## vim-language-server
|
### vim-language-server
|
||||||
|
|
||||||
[vim-language-server](https://github.com/iamcco/vim-language-server) provides completion for vim script. We can install vim-language-server globally:
|
[vim-language-server](https://github.com/iamcco/vim-language-server) provides completion for vim script. We can install vim-language-server globally:
|
||||||
|
|
||||||
@@ -70,7 +105,7 @@ npm install -g vim-language-server
|
|||||||
|
|
||||||
vim-language-server is installed in the same directory as the node executable.
|
vim-language-server is installed in the same directory as the node executable.
|
||||||
|
|
||||||
## Git
|
### Git
|
||||||
|
|
||||||
Git is required by plugin manager [packer.nvim](https://github.com/wbthomason/packer.nvim) and other git-related plugins.
|
Git is required by plugin manager [packer.nvim](https://github.com/wbthomason/packer.nvim) and other git-related plugins.
|
||||||
|
|
||||||
@@ -79,7 +114,7 @@ The version of Git on the Linux system may be too old so that plugins may break.
|
|||||||
Check [here](https://jdhao.github.io/2021/03/27/upgrade_git_on_linux/) on how to install and set up the latest version of Git.
|
Check [here](https://jdhao.github.io/2021/03/27/upgrade_git_on_linux/) on how to install and set up the latest version of Git.
|
||||||
For Windows, install [Git for Windows](https://git-scm.com/download/win) and make sure you can run `git` from command line.
|
For Windows, install [Git for Windows](https://git-scm.com/download/win) and make sure you can run `git` from command line.
|
||||||
|
|
||||||
## ctags
|
### ctags
|
||||||
|
|
||||||
In order to use tags related plugins such as [vista.vim](https://github.com/liuchengxu/vista.vim), we need to install a ctags distribution.
|
In order to use tags related plugins such as [vista.vim](https://github.com/liuchengxu/vista.vim), we need to install a ctags distribution.
|
||||||
Universal-ctags is preferred.
|
Universal-ctags is preferred.
|
||||||
@@ -102,7 +137,7 @@ choco install universal-ctags
|
|||||||
|
|
||||||
Set its PATH properly and make sure you can run `ctags` from command line.
|
Set its PATH properly and make sure you can run `ctags` from command line.
|
||||||
|
|
||||||
## Ripgrep
|
### Ripgrep
|
||||||
|
|
||||||
[Ripgrep](https://github.com/BurntSushi/ripgrep), aka, `rg`, is a fast grepping tool available for both Linux, Windows and macOS.
|
[Ripgrep](https://github.com/BurntSushi/ripgrep), aka, `rg`, is a fast grepping tool available for both Linux, Windows and macOS.
|
||||||
It is used by several searching plugins.
|
It is used by several searching plugins.
|
||||||
@@ -112,7 +147,7 @@ For Linux, we can download the [binary release](https://github.com/BurntSushi/ri
|
|||||||
|
|
||||||
Set its PATH properly and make sure you can run `rg` from command line.
|
Set its PATH properly and make sure you can run `rg` from command line.
|
||||||
|
|
||||||
## Linters
|
### Linters
|
||||||
|
|
||||||
A linter is a tool to check the source code for possible style and syntax issues.
|
A linter is a tool to check the source code for possible style and syntax issues.
|
||||||
Based on the programming languages we use, we may need to install various linters.
|
Based on the programming languages we use, we may need to install various linters.
|
||||||
@@ -122,35 +157,18 @@ Based on the programming languages we use, we may need to install various linter
|
|||||||
|
|
||||||
Set their PATH properly and make sure you can run `pylint`, `flake8` and `vint` from command line.
|
Set their PATH properly and make sure you can run `pylint`, `flake8` and `vint` from command line.
|
||||||
|
|
||||||
## Terminal emulators
|
## Install Nvim
|
||||||
|
|
||||||
Which [terminal emulator](https://en.wikipedia.org/wiki/Terminal_emulator) we choose to use greatly affects the appearance and features of Nvim.
|
|
||||||
Since Nvim supports true colors, terminals that support true colors are preferred.
|
|
||||||
For a list of terminals that support true colors, see [here](https://github.com/termstandard/colors).
|
|
||||||
|
|
||||||
For macOS, we can use [kitty](https://sw.kovidgoyal.net/kitty/), [iterm2](https://www.iterm2.com/), [wezterm](https://wezfurlong.org/wezterm/) or [Alacritty](https://github.com/jwilm/alacritty).
|
|
||||||
|
|
||||||
If you ssh to Linux server on Windows, I recommend [wsltty](https://github.com/mintty/wsltty) and [Cygwin](https://www.cygwin.com/),
|
|
||||||
both of them use [mintty](https://github.com/mintty/mintty) as the terminal emulator.
|
|
||||||
For the latest version of Windows 10, you can also try [Windows Terminal](https://github.com/microsoft/terminal).
|
|
||||||
|
|
||||||
## Patched Fonts
|
|
||||||
|
|
||||||
Since statusline or file explorer plugins often use Unicode symbols not available in normal font,
|
|
||||||
we need to install a patched font from the [nerd-fonts](https://github.com/ryanoasis/nerd-fonts) project.
|
|
||||||
|
|
||||||
# Install Nvim
|
|
||||||
|
|
||||||
There are various ways to install Nvim depending on your system.
|
There are various ways to install Nvim depending on your system.
|
||||||
This config is only maintained for [the latest nvim stable release](https://github.com/neovim/neovim/releases/tag/stable).
|
This config is only maintained for [the latest nvim stable release](https://github.com/neovim/neovim/releases/tag/stable).
|
||||||
|
|
||||||
## Linux
|
### Linux
|
||||||
|
|
||||||
You can directly download the binary release from [here](https://github.com/neovim/neovim/releases/download/stable/nvim-linux64.tar.gz).
|
You can directly download the binary release from [here](https://github.com/neovim/neovim/releases/download/stable/nvim-linux64.tar.gz).
|
||||||
You can also use the system package manager to install nvim,
|
You can also use the system package manager to install nvim,
|
||||||
but that is not reliable since the latest version may not be available.
|
but that is not reliable since the latest version may not be available.
|
||||||
|
|
||||||
## Windows
|
### Windows
|
||||||
|
|
||||||
You may download from [nvim release](https://github.com/neovim/neovim/releases/download/stable/nvim-win64.zip) from GitHub and manually extract it.
|
You may download from [nvim release](https://github.com/neovim/neovim/releases/download/stable/nvim-win64.zip) from GitHub and manually extract it.
|
||||||
|
|
||||||
@@ -164,7 +182,7 @@ choco install neovim
|
|||||||
# scoop install neovim
|
# scoop install neovim
|
||||||
```
|
```
|
||||||
|
|
||||||
## macOS
|
### macOS
|
||||||
|
|
||||||
It is recommended to install neovim via [Homebrew](https://brew.sh/) on macOS. Simply run the following command:
|
It is recommended to install neovim via [Homebrew](https://brew.sh/) on macOS. Simply run the following command:
|
||||||
|
|
||||||
@@ -175,9 +193,11 @@ brew install neovim
|
|||||||
After installing Nvim, we need to set the path to nvim correctly.
|
After installing Nvim, we need to set the path to nvim correctly.
|
||||||
**Make sure that you can run `nvim` from the command line after all these setups**.
|
**Make sure that you can run `nvim` from the command line after all these setups**.
|
||||||
|
|
||||||
# Setting up Nvim
|
## Setting up Nvim
|
||||||
|
|
||||||
## Install plugin manager packer.nvim
|
After installing nvim and all the dependencies, we will install plugin managers and set up this config.
|
||||||
|
|
||||||
|
### Install plugin manager packer.nvim
|
||||||
|
|
||||||
I use packer.nvim to manage my plugins. We need to install packer.nvim on our system first.
|
I use packer.nvim to manage my plugins. We need to install packer.nvim on our system first.
|
||||||
|
|
||||||
@@ -193,7 +213,7 @@ For macOS and Linux, run the following command:
|
|||||||
git clone --depth=1 https://github.com/wbthomason/packer.nvim ~/.local/share/nvim/site/pack/packer/opt/packer.nvim
|
git clone --depth=1 https://github.com/wbthomason/packer.nvim ~/.local/share/nvim/site/pack/packer/opt/packer.nvim
|
||||||
```
|
```
|
||||||
|
|
||||||
## How to install this configuration
|
### How to install this configuration
|
||||||
|
|
||||||
On Linux and macOS, the directory is `~/.config/nvim`.
|
On Linux and macOS, the directory is `~/.config/nvim`.
|
||||||
On Windows, the config directory is `$HOME/AppData/Local/nvim`[^1].
|
On Windows, the config directory is `$HOME/AppData/Local/nvim`[^1].
|
||||||
@@ -207,18 +227,4 @@ git clone --depth=1 https://github.com/jdhao/nvim-config.git .
|
|||||||
After that, when we first open nvim, run command `:PackerSync` to install all the plugins.
|
After that, when we first open nvim, run command `:PackerSync` to install all the plugins.
|
||||||
Since I use quite a lot of plugins (more than 60), it may take some time to install all of them.
|
Since I use quite a lot of plugins (more than 60), it may take some time to install all of them.
|
||||||
|
|
||||||
# Automatic installation
|
|
||||||
|
|
||||||
## Automatic Installation for Linux #
|
|
||||||
|
|
||||||
To set up a workable Nvim environment on Linux,
|
|
||||||
I use [a bash script](nvim_setup_linux.sh) to automatically install necessary dependencies, Nvim itself and configs.
|
|
||||||
|
|
||||||
Note that the variable `PYTHON_INSTALLED`, `SYSTEM_PYTHON` and `ADD_TO_SYSTEM_PATH` in the script
|
|
||||||
should be set properly based on your environment.
|
|
||||||
|
|
||||||
## Automatic installation for Windows
|
|
||||||
|
|
||||||
Run script [nvim_setup_windows.ps1](nvim_setup_windows.ps1) under PowerShell.
|
|
||||||
|
|
||||||
[^1]: Use `echo %userprofile%` to see where your `$HOME` is.
|
[^1]: Use `echo %userprofile%` to see where your `$HOME` is.
|
||||||
|
|||||||
@@ -1,32 +0,0 @@
|
|||||||
local alpha = require("alpha")
|
|
||||||
local dashboard = require("alpha.themes.dashboard")
|
|
||||||
|
|
||||||
-- Set header
|
|
||||||
dashboard.section.header.val = {
|
|
||||||
" ",
|
|
||||||
" ███╗ ██╗███████╗ ██████╗ ██╗ ██╗██╗███╗ ███╗ ",
|
|
||||||
" ████╗ ██║██╔════╝██╔═══██╗██║ ██║██║████╗ ████║ ",
|
|
||||||
" ██╔██╗ ██║█████╗ ██║ ██║██║ ██║██║██╔████╔██║ ",
|
|
||||||
" ██║╚██╗██║██╔══╝ ██║ ██║╚██╗ ██╔╝██║██║╚██╔╝██║ ",
|
|
||||||
" ██║ ╚████║███████╗╚██████╔╝ ╚████╔╝ ██║██║ ╚═╝ ██║ ",
|
|
||||||
" ╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚═══╝ ╚═╝╚═╝ ╚═╝ ",
|
|
||||||
" ",
|
|
||||||
}
|
|
||||||
|
|
||||||
-- Set menu
|
|
||||||
dashboard.section.buttons.val = {
|
|
||||||
dashboard.button( "Leader f f", " > Find file", ":Leaderf file --popup<CR>"),
|
|
||||||
dashboard.button( "Leader f r", " > Recent files" , ":Leaderf mru --popup<CR>"),
|
|
||||||
dashboard.button( "Leader f g", " > Project grep" , ":Leaderf rg --popup<CR>"),
|
|
||||||
dashboard.button( "u", " > Update plugins" , ":PackerSync<CR>"),
|
|
||||||
dashboard.button( "e", " > New file" , ":enew <CR>"),
|
|
||||||
dashboard.button( "q", " > Quit NVIM", ":qa<CR>"),
|
|
||||||
}
|
|
||||||
|
|
||||||
local fortune = require("alpha.fortune")
|
|
||||||
dashboard.section.footer.val = fortune()
|
|
||||||
|
|
||||||
alpha.setup(dashboard.opts)
|
|
||||||
|
|
||||||
-- Send config to alpha
|
|
||||||
alpha.setup(dashboard.opts)
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
require("autosave").setup({
|
|
||||||
enabled = true,
|
|
||||||
execution_message = "Autosaved at " .. vim.fn.strftime("%H:%M:%S"),
|
|
||||||
events = { "InsertLeave", "TextChanged" },
|
|
||||||
conditions = {
|
|
||||||
exists = true,
|
|
||||||
filename_is_not = {"plugins.lua"},
|
|
||||||
filetype_is_not = {},
|
|
||||||
modifiable = true,
|
|
||||||
},
|
|
||||||
write_all_buffers = false,
|
|
||||||
on_off_commands = true,
|
|
||||||
clean_command_line_interval = 1000,
|
|
||||||
debounce_delay = 135,
|
|
||||||
})
|
|
||||||
65
lua/config/dashboard-nvim.lua
Normal file
65
lua/config/dashboard-nvim.lua
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
local dashboard = require("dashboard")
|
||||||
|
|
||||||
|
dashboard.custom_header = {
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ███╗ ██╗ ███████╗ ██████╗ ██╗ ██╗ ██╗ ███╗ ███╗",
|
||||||
|
" ████╗ ██║ ██╔════╝██╔═══██╗ ██║ ██║ ██║ ████╗ ████║",
|
||||||
|
" ██╔██╗ ██║ █████╗ ██║ ██║ ██║ ██║ ██║ ██╔████╔██║",
|
||||||
|
" ██║╚██╗██║ ██╔══╝ ██║ ██║ ╚██╗ ██╔╝ ██║ ██║╚██╔╝██║",
|
||||||
|
" ██║ ╚████║ ███████╗╚██████╔╝ ╚████╔╝ ██║ ██║ ╚═╝ ██║",
|
||||||
|
" ╚═╝ ╚═══╝ ╚══════╝ ╚═════╝ ╚═══╝ ╚═╝ ╚═╝ ╚═╝",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
}
|
||||||
|
|
||||||
|
dashboard.custom_center = {
|
||||||
|
{
|
||||||
|
icon = " ",
|
||||||
|
desc = "Find File ",
|
||||||
|
action = "Leaderf file --popup",
|
||||||
|
shortcut = "<Leader> f f",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon = " ",
|
||||||
|
desc = "Recently opened files ",
|
||||||
|
action = "Leaderf mru --popup",
|
||||||
|
shortcut = "<Leader> f r",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon = " ",
|
||||||
|
desc = "Project grep ",
|
||||||
|
action = "Leaderf rg --popup",
|
||||||
|
shortcut = "<Leader> f g",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon = " ",
|
||||||
|
desc = "Open Nvim config ",
|
||||||
|
action = "tabnew $MYVIMRC | tcd %:p:h",
|
||||||
|
shortcut = "<Leader> e v",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon = " ",
|
||||||
|
desc = "New file ",
|
||||||
|
action = "enew",
|
||||||
|
shortcut = "e ",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon = " ",
|
||||||
|
desc = "Quit Nvim ",
|
||||||
|
-- desc = "Quit Nvim ",
|
||||||
|
action = "qa",
|
||||||
|
shortcut = "q "
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
vim.cmd([[
|
||||||
|
augroup dashboard_enter
|
||||||
|
au!
|
||||||
|
autocmd FileType dashboard nnoremap <buffer> q :qa<CR>
|
||||||
|
autocmd FileType dashboard nnoremap <buffer> e :enew<CR>
|
||||||
|
augroup END
|
||||||
|
]])
|
||||||
@@ -33,7 +33,6 @@ cmp.setup({
|
|||||||
sources = {
|
sources = {
|
||||||
{ name = 'nvim_lsp' }, -- For nvim-lsp
|
{ name = 'nvim_lsp' }, -- For nvim-lsp
|
||||||
{ name = 'ultisnips' }, -- For ultisnips user.
|
{ name = 'ultisnips' }, -- For ultisnips user.
|
||||||
{ name = 'nvim_lua' }, -- for nvim lua function
|
|
||||||
{ name = 'path' }, -- for path completion
|
{ name = 'path' }, -- for path completion
|
||||||
{ name = 'buffer', keyword_length = 4 }, -- for buffer word completion
|
{ name = 'buffer', keyword_length = 4 }, -- for buffer word completion
|
||||||
{ name = 'omni' },
|
{ name = 'omni' },
|
||||||
|
|||||||
@@ -21,20 +21,36 @@ local function ime_state()
|
|||||||
end
|
end
|
||||||
|
|
||||||
local function trailing_space()
|
local function trailing_space()
|
||||||
-- Get the positions of trailing whitespaces from plugin 'jdhao/whitespace.nvim'.
|
if not vim.o.modifiable then
|
||||||
local trailing_space_pos = vim.b.trailing_whitespace_pos
|
return ""
|
||||||
|
end
|
||||||
|
|
||||||
|
local line_num = nil
|
||||||
|
|
||||||
|
for i=1, fn.line('$') do
|
||||||
|
local linetext = fn.getline(i)
|
||||||
|
-- To prevent invalid escape error, we wrap the regex string with `[[]]`.
|
||||||
|
local idx = fn.match(linetext, [[\v\s+$]])
|
||||||
|
|
||||||
|
if idx ~= -1 then
|
||||||
|
line_num = i
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local msg = ""
|
local msg = ""
|
||||||
if #trailing_space_pos > 0 then
|
if line_num ~= nil then
|
||||||
-- Note that lua index is 1-based, not zero based!!!
|
msg = string.format("[%d]trailing", line_num)
|
||||||
local line = trailing_space_pos[1][1]
|
|
||||||
msg = string.format("[%d]trailing", line)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
return msg
|
return msg
|
||||||
end
|
end
|
||||||
|
|
||||||
local function mixed_indent()
|
local function mixed_indent()
|
||||||
|
if not vim.o.modifiable then
|
||||||
|
return ""
|
||||||
|
end
|
||||||
|
|
||||||
local space_pat = [[\v^ +]]
|
local space_pat = [[\v^ +]]
|
||||||
local tab_pat = [[\v^\t+]]
|
local tab_pat = [[\v^\t+]]
|
||||||
local space_indent = fn.search(space_pat, 'nwc')
|
local space_indent = fn.search(space_pat, 'nwc')
|
||||||
|
|||||||
@@ -15,9 +15,11 @@ end
|
|||||||
|
|
||||||
-- Load packer.nvim
|
-- Load packer.nvim
|
||||||
vim.cmd("packadd packer.nvim")
|
vim.cmd("packadd packer.nvim")
|
||||||
local util = require('packer.util')
|
|
||||||
|
|
||||||
require("packer").startup({
|
local packer = require("packer")
|
||||||
|
local packer_util = require('packer.util')
|
||||||
|
|
||||||
|
packer.startup({
|
||||||
function(use)
|
function(use)
|
||||||
-- it is recommened to put impatient.nvim before any other plugins
|
-- it is recommened to put impatient.nvim before any other plugins
|
||||||
use {'lewis6991/impatient.nvim', config = [[require('impatient')]]}
|
use {'lewis6991/impatient.nvim', config = [[require('impatient')]]}
|
||||||
@@ -30,7 +32,7 @@ require("packer").startup({
|
|||||||
|
|
||||||
-- nvim-cmp completion sources
|
-- nvim-cmp completion sources
|
||||||
use {"hrsh7th/cmp-nvim-lsp", after = "nvim-cmp"}
|
use {"hrsh7th/cmp-nvim-lsp", after = "nvim-cmp"}
|
||||||
use {"hrsh7th/cmp-nvim-lua", after = "nvim-cmp"}
|
-- use {"hrsh7th/cmp-nvim-lua", after = "nvim-cmp"}
|
||||||
use {"hrsh7th/cmp-path", after = "nvim-cmp"}
|
use {"hrsh7th/cmp-path", after = "nvim-cmp"}
|
||||||
use {"hrsh7th/cmp-buffer", after = "nvim-cmp"}
|
use {"hrsh7th/cmp-buffer", after = "nvim-cmp"}
|
||||||
use { "hrsh7th/cmp-omni", after = "nvim-cmp" }
|
use { "hrsh7th/cmp-omni", after = "nvim-cmp" }
|
||||||
@@ -119,6 +121,7 @@ require("packer").startup({
|
|||||||
use({"sainnhe/everforest", opt = true})
|
use({"sainnhe/everforest", opt = true})
|
||||||
use({"EdenEast/nightfox.nvim", opt = true})
|
use({"EdenEast/nightfox.nvim", opt = true})
|
||||||
use({"rebelot/kanagawa.nvim", opt = true})
|
use({"rebelot/kanagawa.nvim", opt = true})
|
||||||
|
use({"catppuccin/nvim", as = "catppuccin", opt = true})
|
||||||
|
|
||||||
-- Show git change (change, delete, add) signs in vim sign column
|
-- Show git change (change, delete, add) signs in vim sign column
|
||||||
use({"mhinz/vim-signify", event = 'BufEnter'})
|
use({"mhinz/vim-signify", event = 'BufEnter'})
|
||||||
@@ -136,7 +139,7 @@ require("packer").startup({
|
|||||||
use({ "akinsho/bufferline.nvim", event = "VimEnter", config = [[require('config.bufferline')]] })
|
use({ "akinsho/bufferline.nvim", event = "VimEnter", config = [[require('config.bufferline')]] })
|
||||||
|
|
||||||
-- fancy start screen
|
-- fancy start screen
|
||||||
-- use { 'goolord/alpha-nvim', event = 'VimEnter', config = [[require('config.alpha-nvim')]] }
|
use { 'glepnir/dashboard-nvim', config = [[require('config.dashboard-nvim')]] }
|
||||||
|
|
||||||
use({
|
use({
|
||||||
"lukas-reineke/indent-blankline.nvim",
|
"lukas-reineke/indent-blankline.nvim",
|
||||||
@@ -183,13 +186,7 @@ require("packer").startup({
|
|||||||
-- use 'mg979/vim-visual-multi'
|
-- use 'mg979/vim-visual-multi'
|
||||||
|
|
||||||
-- Autosave files on certain events
|
-- Autosave files on certain events
|
||||||
use({
|
use({"907th/vim-auto-save", event = "InsertEnter"})
|
||||||
"Pocco81/AutoSave.nvim",
|
|
||||||
event = "VimEnter",
|
|
||||||
config = function()
|
|
||||||
vim.defer_fn(function() require('config.autosave') end, 1500)
|
|
||||||
end
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Show undo history visually
|
-- Show undo history visually
|
||||||
use({"simnalamburt/vim-mundo", cmd = {"MundoToggle", "MundoShow"}})
|
use({"simnalamburt/vim-mundo", cmd = {"MundoToggle", "MundoShow"}})
|
||||||
@@ -356,10 +353,12 @@ require("packer").startup({
|
|||||||
requires = { 'kyazdani42/nvim-web-devicons' },
|
requires = { 'kyazdani42/nvim-web-devicons' },
|
||||||
config = [[require('config.nvim-tree')]]
|
config = [[require('config.nvim-tree')]]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
use { 'ii14/emmylua-nvim', ft = 'lua' }
|
||||||
end,
|
end,
|
||||||
config = {
|
config = {
|
||||||
max_jobs = 16,
|
max_jobs = 16,
|
||||||
compile_path = util.join_paths(fn.stdpath('data'), 'site', 'lua', 'packer_compiled.lua'),
|
compile_path = packer_util.join_paths(fn.stdpath('data'), 'site', 'lua', 'packer_compiled.lua'),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -8,3 +8,40 @@ call utils#Cabbrev('man', 'Man')
|
|||||||
|
|
||||||
" show current date and time in human readable format
|
" show current date and time in human readable format
|
||||||
command! -nargs=? Datetime echo utils#iso_time(<q-args>)
|
command! -nargs=? Datetime echo utils#iso_time(<q-args>)
|
||||||
|
|
||||||
|
" Convert Markdown file to PDF
|
||||||
|
command! ToPDF call s:md_to_pdf()
|
||||||
|
|
||||||
|
function! s:md_to_pdf() abort
|
||||||
|
" check if pandoc is installed
|
||||||
|
if executable('pandoc') != 1
|
||||||
|
echoerr "pandoc not found"
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:md_path = expand("%:p")
|
||||||
|
let l:pdf_path = fnamemodify(l:md_path, ":r") .. ".pdf"
|
||||||
|
|
||||||
|
let l:header_path = stdpath('config') . '/resources/head.tex'
|
||||||
|
|
||||||
|
let l:cmd = "pandoc --pdf-engine=xelatex --highlight-style=zenburn --table-of-content " .
|
||||||
|
\ "--include-in-header=" . l:header_path . " -V fontsize=10pt -V colorlinks -V toccolor=NavyBlue " .
|
||||||
|
\ "-V linkcolor=red -V urlcolor=teal -V filecolor=magenta -s " .
|
||||||
|
\ l:md_path . " -o " . l:pdf_path
|
||||||
|
|
||||||
|
if g:is_mac
|
||||||
|
let l:cmd = l:cmd . '&& open ' . l:pdf_path
|
||||||
|
endif
|
||||||
|
|
||||||
|
if g:is_win
|
||||||
|
let l:cmd = l:cmd . '&& start ' . l:pdf_path
|
||||||
|
endif
|
||||||
|
|
||||||
|
" echomsg l:cmd
|
||||||
|
|
||||||
|
let l:id = jobstart(l:cmd)
|
||||||
|
|
||||||
|
if l:id == 0 || l:id == -1
|
||||||
|
echoerr "Error running command"
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|||||||
78
resources/head.tex
Normal file
78
resources/head.tex
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
\usepackage{fancyvrb,newverbs}
|
||||||
|
\usepackage[top=2cm, bottom=1.5cm, left=2cm, right=2cm]{geometry}
|
||||||
|
|
||||||
|
\PassOptionsToPackage{dvipsnames,svgnames,x11names}{xcolor}
|
||||||
|
\usepackage{hyperref}
|
||||||
|
|
||||||
|
% begin a new page for each section (first level header),
|
||||||
|
% we need to combine this with `-V subparagraph` when invoking pandc
|
||||||
|
% \usepackage{titlesec}
|
||||||
|
% \newcommand{\sectionbreak}{\clearpage}
|
||||||
|
|
||||||
|
% change background color for inline code in markdown files.
|
||||||
|
% The following code does not work well for long text, because the text will exceed the page boundary.
|
||||||
|
\definecolor{bgcolor}{HTML}{DADADA}
|
||||||
|
\let\oldtexttt\texttt
|
||||||
|
|
||||||
|
\renewcommand{\texttt}[1]{
|
||||||
|
\colorbox{bgcolor}{\oldtexttt{#1}}
|
||||||
|
}
|
||||||
|
|
||||||
|
% change style of quote, see also https://tex.stackexchange.com/a/436253/114857
|
||||||
|
\usepackage[most]{tcolorbox}
|
||||||
|
|
||||||
|
\definecolor{linequote}{RGB}{224,215,188}
|
||||||
|
\definecolor{backquote}{RGB}{249,245,233}
|
||||||
|
\definecolor{bordercolor}{RGB}{221,221,221}
|
||||||
|
|
||||||
|
% change left border: https://tex.stackexchange.com/a/475716/114857
|
||||||
|
% change left margin: https://tex.stackexchange.com/a/457936/114857
|
||||||
|
\newtcolorbox{myquote}[1][]{%
|
||||||
|
enhanced,
|
||||||
|
breakable,
|
||||||
|
size=minimal,
|
||||||
|
left=10pt,
|
||||||
|
top=5pt,
|
||||||
|
bottom=5pt,
|
||||||
|
frame hidden,
|
||||||
|
boxrule=0pt,
|
||||||
|
sharp corners=all,
|
||||||
|
colback=backquote,
|
||||||
|
borderline west={2pt}{0pt}{bordercolor},
|
||||||
|
#1
|
||||||
|
}
|
||||||
|
|
||||||
|
% redefine quote environment to use the myquote environment, see https://tex.stackexchange.com/a/337587/114857
|
||||||
|
\renewenvironment{quote}{\begin{myquote}}{\end{myquote}}
|
||||||
|
|
||||||
|
% start a new page after toc, we need to save the old command before defining
|
||||||
|
% new one to avoid recursive command calls,
|
||||||
|
% see https://tex.stackexchange.com/questions/47351/can-i-redefine-a-command-to-contain-itself
|
||||||
|
\let\oldtoc\tableofcontents
|
||||||
|
\renewcommand{\tableofcontents}{\oldtoc\newpage}
|
||||||
|
|
||||||
|
% fix header level issue
|
||||||
|
\usepackage{enumitem}
|
||||||
|
\setlistdepth{9}
|
||||||
|
|
||||||
|
\setlist[itemize,1]{label=$\bullet$}
|
||||||
|
\setlist[itemize,2]{label=$\bullet$}
|
||||||
|
\setlist[itemize,3]{label=$\bullet$}
|
||||||
|
\setlist[itemize,4]{label=$\bullet$}
|
||||||
|
\setlist[itemize,5]{label=$\bullet$}
|
||||||
|
\setlist[itemize,6]{label=$\bullet$}
|
||||||
|
\setlist[itemize,7]{label=$\bullet$}
|
||||||
|
\setlist[itemize,8]{label=$\bullet$}
|
||||||
|
\setlist[itemize,9]{label=$\bullet$}
|
||||||
|
\renewlist{itemize}{itemize}{9}
|
||||||
|
|
||||||
|
\setlist[enumerate,1]{label=$\arabic*.$}
|
||||||
|
\setlist[enumerate,2]{label=$\alph*.$}
|
||||||
|
\setlist[enumerate,3]{label=$\roman*.$}
|
||||||
|
\setlist[enumerate,4]{label=$\arabic*.$}
|
||||||
|
\setlist[enumerate,5]{label=$\alpha*$}
|
||||||
|
\setlist[enumerate,6]{label=$\roman*.$}
|
||||||
|
\setlist[enumerate,7]{label=$\arabic*.$}
|
||||||
|
\setlist[enumerate,8]{label=$\alph*.$}
|
||||||
|
\setlist[enumerate,9]{label=$\roman*.$}
|
||||||
|
\renewlist{enumerate}{enumerate}{9}
|
||||||
Reference in New Issue
Block a user