mirror of
https://github.com/jdhao/nvim-config.git
synced 2025-06-08 14:14:33 +02:00
1. Change autocmd for buffers started by firenivm, it seems that BufNewFile does not work as intended, in contrast, BufEnter, BufRead, BufWinEnter seem to work. 2. Disable several plugins if we are using firenvim, these plugins include dashboard-nvim, lualine, bufferline.nvim
433 lines
14 KiB
VimL
433 lines
14 KiB
VimL
scriptencoding utf-8
|
|
|
|
" Plugin specification and lua stuff
|
|
lua require('plugins')
|
|
|
|
" Use short names for common plugin manager commands to simplify typing.
|
|
" To use these shortcuts: first activate command line with `:`, then input the
|
|
" short alias, e.g., `pi`, then press <space>, the alias will be expanded to
|
|
" the full command automatically.
|
|
call utils#Cabbrev('pi', 'PackerInstall')
|
|
call utils#Cabbrev('pud', 'PackerUpdate')
|
|
call utils#Cabbrev('pc', 'PackerClean')
|
|
call utils#Cabbrev('ps', 'PackerSync')
|
|
|
|
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
|
" configurations for vim script plugin "
|
|
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
|
|
|
"""""""""""""""""""""""""UltiSnips settings"""""""""""""""""""
|
|
" Trigger configuration. Do not use <tab> if you use YouCompleteMe
|
|
let g:UltiSnipsExpandTrigger='<c-j>'
|
|
|
|
" Do not look for SnipMate snippets
|
|
let g:UltiSnipsEnableSnipMate = 0
|
|
|
|
" Shortcut to jump forward and backward in tabstop positions
|
|
let g:UltiSnipsJumpForwardTrigger='<c-j>'
|
|
let g:UltiSnipsJumpBackwardTrigger='<c-k>'
|
|
|
|
" Configuration for custom snippets directory, see
|
|
" https://jdhao.github.io/2019/04/17/neovim_snippet_s1/ for details.
|
|
let g:UltiSnipsSnippetDirectories=['UltiSnips', 'my_snippets']
|
|
|
|
"""""""""""""""""""""""""" vlime settings """"""""""""""""""""""""""""""""
|
|
command! -nargs=0 StartVlime call jobstart(printf("sbcl --load %s/vlime/lisp/start-vlime.lisp", g:package_home))
|
|
|
|
"""""""""""""""""""""""""""""LeaderF settings"""""""""""""""""""""
|
|
" Do not use cache file
|
|
let g:Lf_UseCache = 0
|
|
" Refresh each time we call leaderf
|
|
let g:Lf_UseMemoryCache = 0
|
|
|
|
" Ignore certain files and directories when searching files
|
|
let g:Lf_WildIgnore = {
|
|
\ 'dir': ['.git', '__pycache__', '.DS_Store'],
|
|
\ 'file': ['*.exe', '*.dll', '*.so', '*.o', '*.pyc', '*.jpg', '*.png',
|
|
\ '*.gif', '*.svg', '*.ico', '*.db', '*.tgz', '*.tar.gz', '*.gz',
|
|
\ '*.zip', '*.bin', '*.pptx', '*.xlsx', '*.docx', '*.pdf', '*.tmp',
|
|
\ '*.wmv', '*.mkv', '*.mp4', '*.rmvb', '*.ttf', '*.ttc', '*.otf',
|
|
\ '*.mp3', '*.aac']
|
|
\}
|
|
|
|
" Do not show fancy icons for Linux server.
|
|
if g:is_linux
|
|
let g:Lf_ShowDevIcons = 0
|
|
endif
|
|
|
|
" Only fuzzy-search files names
|
|
let g:Lf_DefaultMode = 'FullPath'
|
|
|
|
" Popup window settings
|
|
let w = float2nr(&columns * 0.8)
|
|
if w > 140
|
|
let g:Lf_PopupWidth = 140
|
|
else
|
|
let g:Lf_PopupWidth = w
|
|
endif
|
|
|
|
let g:Lf_PopupPosition = [0, float2nr((&columns - g:Lf_PopupWidth)/2)]
|
|
|
|
" Do not use version control tool to list files under a directory since
|
|
" submodules are not searched by default.
|
|
let g:Lf_UseVersionControlTool = 0
|
|
|
|
" Use rg as the default search tool
|
|
let g:Lf_DefaultExternalTool = "rg"
|
|
|
|
" show dot files
|
|
let g:Lf_ShowHidden = 1
|
|
|
|
" Disable default mapping
|
|
let g:Lf_ShortcutF = ''
|
|
let g:Lf_ShortcutB = ''
|
|
|
|
" set up working directory for git repository
|
|
let g:Lf_WorkingDirectoryMode = 'a'
|
|
|
|
" Search files in popup window
|
|
nnoremap <silent> <leader>ff :<C-U>Leaderf file --popup<CR>
|
|
|
|
" Grep project files in popup window
|
|
nnoremap <silent> <leader>fg :<C-U>Leaderf rg --no-messages --popup<CR>
|
|
|
|
" Search vim help files
|
|
nnoremap <silent> <leader>fh :<C-U>Leaderf help --popup<CR>
|
|
|
|
" Search tags in current buffer
|
|
nnoremap <silent> <leader>ft :<C-U>Leaderf bufTag --popup<CR>
|
|
|
|
" Switch buffers
|
|
nnoremap <silent> <leader>fb :<C-U>Leaderf buffer --popup<CR>
|
|
|
|
" Search recent files
|
|
nnoremap <silent> <leader>fr :<C-U>Leaderf mru --popup --absolute-path<CR>
|
|
|
|
let g:Lf_PopupColorscheme = 'gruvbox_material'
|
|
|
|
" Change keybinding in LeaderF prompt mode, use ctrl-n and ctrl-p to navigate
|
|
" items.
|
|
let g:Lf_CommandMap = {'<C-J>': ['<C-N>'], '<C-K>': ['<C-P>']}
|
|
|
|
""""""""""""""""""""""""""""open-browser.vim settings"""""""""""""""""""
|
|
if g:is_win || g:is_mac
|
|
" Disable netrw's gx mapping.
|
|
let g:netrw_nogx = 1
|
|
|
|
" Use another mapping for the open URL method
|
|
nmap ob <Plug>(openbrowser-smart-search)
|
|
xmap ob <Plug>(openbrowser-smart-search)
|
|
endif
|
|
|
|
""""""""""""""""""""""""""" vista settings """"""""""""""""""""""""""""""""""
|
|
let g:vista#renderer#icons = {
|
|
\ 'member': '',
|
|
\ }
|
|
|
|
" Do not echo message on command line
|
|
let g:vista_echo_cursor = 0
|
|
" Stay in current window when vista window is opened
|
|
let g:vista_stay_on_open = 0
|
|
|
|
nnoremap <silent> <Space>t :<C-U>Vista!!<CR>
|
|
|
|
""""""""""""""""""""""""vim-mundo settings"""""""""""""""""""""""
|
|
let g:mundo_verbose_graph = 0
|
|
let g:mundo_width = 80
|
|
|
|
nnoremap <silent> <Space>u :MundoToggle<CR>
|
|
|
|
""""""""""""""""""""""""""""vim-yoink settings"""""""""""""""""""""""""
|
|
if g:is_win || g:is_mac
|
|
" ctrl-n and ctrl-p will not work if you add the TextChanged event to vim-auto-save events.
|
|
" nmap <c-n> <plug>(YoinkPostPasteSwapBack)
|
|
" nmap <c-p> <plug>(YoinkPostPasteSwapForward)
|
|
|
|
" The following p/P mappings are also needed for ctrl-n and ctrl-p to work
|
|
" nmap p <plug>(YoinkPaste_p)
|
|
" nmap P <plug>(YoinkPaste_P)
|
|
|
|
" Cycle the yank stack with the following mappings
|
|
nmap [y <plug>(YoinkRotateBack)
|
|
nmap ]y <plug>(YoinkRotateForward)
|
|
|
|
" Do not change the cursor position
|
|
nmap y <plug>(YoinkYankPreserveCursorPosition)
|
|
xmap y <plug>(YoinkYankPreserveCursorPosition)
|
|
|
|
" Move cursor to end of paste after multiline paste
|
|
let g:yoinkMoveCursorToEndOfPaste = 0
|
|
|
|
" Record yanks in system clipboard
|
|
let g:yoinkSyncSystemClipboardOnFocus = 1
|
|
endif
|
|
|
|
""""""""""""""""""""""""""""better-escape.vim settings"""""""""""""""""""""""""
|
|
let g:better_escape_interval = 200
|
|
|
|
""""""""""""""""""""""""""""vim-xkbswitch settings"""""""""""""""""""""""""
|
|
let g:XkbSwitchEnabled = 1
|
|
|
|
"""""""""""""""""""""""""""""" neoformat settings """""""""""""""""""""""
|
|
let g:neoformat_enabled_python = ['black', 'yapf']
|
|
let g:neoformat_cpp_clangformat = {
|
|
\ 'exe': 'clang-format',
|
|
\ 'args': ['--style="{IndentWidth: 4}"']
|
|
\ }
|
|
let g:neoformat_c_clangformat = {
|
|
\ 'exe': 'clang-format',
|
|
\ 'args': ['--style="{IndentWidth: 4}"']
|
|
\ }
|
|
|
|
let g:neoformat_enabled_cpp = ['clangformat']
|
|
let g:neoformat_enabled_c = ['clangformat']
|
|
|
|
"""""""""""""""""""""""""vim-signify settings""""""""""""""""""""""""""""""
|
|
" The VCS to use
|
|
let g:signify_vcs_list = [ 'git' ]
|
|
|
|
" Change the sign for certain operations
|
|
let g:signify_sign_change = '~'
|
|
|
|
"""""""""""""""""""""""""plasticboy/vim-markdown settings"""""""""""""""""""
|
|
" Disable header folding
|
|
let g:vim_markdown_folding_disabled = 1
|
|
|
|
" Whether to use conceal feature in markdown
|
|
let g:vim_markdown_conceal = 1
|
|
|
|
" Disable math tex conceal and syntax highlight
|
|
let g:tex_conceal = ''
|
|
let g:vim_markdown_math = 0
|
|
|
|
" Support front matter of various format
|
|
let g:vim_markdown_frontmatter = 1 " for YAML format
|
|
let g:vim_markdown_toml_frontmatter = 1 " for TOML format
|
|
let g:vim_markdown_json_frontmatter = 1 " for JSON format
|
|
|
|
" Let the TOC window autofit so that it doesn't take too much space
|
|
let g:vim_markdown_toc_autofit = 1
|
|
|
|
"""""""""""""""""""""""""markdown-preview settings"""""""""""""""""""
|
|
" Only setting this for suitable platforms
|
|
if g:is_win || g:is_mac
|
|
" Do not close the preview tab when switching to other buffers
|
|
let g:mkdp_auto_close = 0
|
|
|
|
" Shortcuts to start and stop markdown previewing
|
|
nnoremap <silent> <M-m> :<C-U>MarkdownPreview<CR>
|
|
nnoremap <silent> <M-S-m> :<C-U>MarkdownPreviewStop<CR>
|
|
endif
|
|
|
|
""""""""""""""""""""""""vim-grammarous settings""""""""""""""""""""""""""""""
|
|
if g:is_mac
|
|
let g:grammarous#languagetool_cmd = 'languagetool'
|
|
let g:grammarous#disabled_rules = {
|
|
\ '*' : ['WHITESPACE_RULE', 'EN_QUOTES', 'ARROWS', 'SENTENCE_WHITESPACE',
|
|
\ 'WORD_CONTAINS_UNDERSCORE', 'COMMA_PARENTHESIS_WHITESPACE',
|
|
\ 'EN_UNPAIRED_BRACKETS', 'UPPERCASE_SENTENCE_START',
|
|
\ 'ENGLISH_WORD_REPEAT_BEGINNING_RULE', 'DASH_RULE', 'PLUS_MINUS',
|
|
\ 'PUNCTUATION_PARAGRAPH_END', 'MULTIPLICATION_SIGN', 'PRP_CHECKOUT',
|
|
\ 'CAN_CHECKOUT', 'SOME_OF_THE', 'DOUBLE_PUNCTUATION', 'HELL',
|
|
\ 'CURRENCY', 'POSSESSIVE_APOSTROPHE', 'ENGLISH_WORD_REPEAT_RULE',
|
|
\ 'NON_STANDARD_WORD', 'AU', 'DATE_NEW_YEAR'],
|
|
\ }
|
|
|
|
augroup grammarous_map
|
|
autocmd!
|
|
autocmd FileType markdown nmap <buffer> <leader>x <Plug>(grammarous-close-info-window)
|
|
autocmd FileType markdown nmap <buffer> <c-n> <Plug>(grammarous-move-to-next-error)
|
|
autocmd FileType markdown nmap <buffer> <c-p> <Plug>(grammarous-move-to-previous-error)
|
|
augroup END
|
|
endif
|
|
|
|
""""""""""""""""""""""""unicode.vim settings""""""""""""""""""""""""""""""
|
|
nmap ga <Plug>(UnicodeGA)
|
|
|
|
""""""""""""""""""""""""""""vim-sandwich settings"""""""""""""""""""""""""""""
|
|
" Map s to nop since s in used by vim-sandwich. Use cl instead of s.
|
|
nmap s <Nop>
|
|
omap s <Nop>
|
|
|
|
""""""""""""""""""""""""""""vimtex settings"""""""""""""""""""""""""""""
|
|
if ( g:is_win || g:is_mac ) && executable('latex')
|
|
" Hacks for inverse search to work semi-automatically,
|
|
" see https://jdhao.github.io/2021/02/20/inverse_search_setup_neovim_vimtex/.
|
|
function! s:write_server_name() abort
|
|
let nvim_server_file = (has('win32') ? $TEMP : '/tmp') . '/vimtexserver.txt'
|
|
call writefile([v:servername], nvim_server_file)
|
|
endfunction
|
|
|
|
augroup vimtex_common
|
|
autocmd!
|
|
autocmd FileType tex call s:write_server_name()
|
|
autocmd FileType tex nmap <buffer> <F9> <plug>(vimtex-compile)
|
|
augroup END
|
|
|
|
let g:vimtex_compiler_latexmk = {
|
|
\ 'build_dir' : 'build',
|
|
\ }
|
|
|
|
" TOC settings
|
|
let g:vimtex_toc_config = {
|
|
\ 'name' : 'TOC',
|
|
\ 'layers' : ['content', 'todo', 'include'],
|
|
\ 'resize' : 1,
|
|
\ 'split_width' : 30,
|
|
\ 'todo_sorted' : 0,
|
|
\ 'show_help' : 1,
|
|
\ 'show_numbers' : 1,
|
|
\ 'mode' : 2,
|
|
\ }
|
|
|
|
" Viewer settings for different platforms
|
|
if g:is_win
|
|
let g:vimtex_view_general_viewer = 'SumatraPDF'
|
|
let g:vimtex_view_general_options = '-reuse-instance -forward-search @tex @line @pdf'
|
|
endif
|
|
|
|
if g:is_mac
|
|
" let g:vimtex_view_method = "skim"
|
|
let g:vimtex_view_general_viewer = '/Applications/Skim.app/Contents/SharedSupport/displayline'
|
|
let g:vimtex_view_general_options = '-r @line @pdf @tex'
|
|
|
|
augroup vimtex_mac
|
|
autocmd!
|
|
autocmd User VimtexEventCompileSuccess call UpdateSkim()
|
|
augroup END
|
|
|
|
" The following code is adapted from https://gist.github.com/skulumani/7ea00478c63193a832a6d3f2e661a536.
|
|
function! UpdateSkim() abort
|
|
let l:out = b:vimtex.out()
|
|
let l:src_file_path = expand('%:p')
|
|
let l:cmd = [g:vimtex_view_general_viewer, '-r']
|
|
|
|
if !empty(system('pgrep Skim'))
|
|
call extend(l:cmd, ['-g'])
|
|
endif
|
|
|
|
call jobstart(l:cmd + [line('.'), l:out, l:src_file_path])
|
|
endfunction
|
|
endif
|
|
endif
|
|
|
|
""""""""""""""""""""""""""""vim-startify settings""""""""""""""""""""""""""""
|
|
" Do not change working directory when opening files.
|
|
let g:startify_change_to_dir = 0
|
|
let g:startify_fortune_use_unicode = 1
|
|
|
|
""""""""""""""""""""""""""""vim-matchup settings"""""""""""""""""""""""""""""
|
|
" Improve performance
|
|
let g:matchup_matchparen_deferred = 1
|
|
let g:matchup_matchparen_timeout = 100
|
|
let g:matchup_matchparen_insert_timeout = 30
|
|
|
|
" Enhanced matching with matchup plugin
|
|
let g:matchup_override_vimtex = 1
|
|
|
|
" Whether to enable matching inside comment or string
|
|
let g:matchup_delim_noskips = 0
|
|
|
|
" Show offscreen match pair in popup window
|
|
let g:matchup_matchparen_offscreen = {'method': 'popup'}
|
|
|
|
"""""""""""""""""""""""""" asyncrun.vim settings """"""""""""""""""""""""""
|
|
" Automatically open quickfix window of 6 line tall after asyncrun starts
|
|
let g:asyncrun_open = 6
|
|
if g:is_win
|
|
" Command output encoding for Windows
|
|
let g:asyncrun_encs = 'gbk'
|
|
endif
|
|
|
|
""""""""""""""""""""""""""""""firenvim settings""""""""""""""""""""""""""""""
|
|
if exists('g:started_by_firenvim') && g:started_by_firenvim
|
|
if g:is_mac
|
|
set guifont=Iosevka\ Nerd\ Font:h18
|
|
else
|
|
set guifont=Consolas
|
|
endif
|
|
|
|
" general config for firenvim
|
|
let g:firenvim_config = {
|
|
\ 'globalSettings': {
|
|
\ 'alt': 'all',
|
|
\ },
|
|
\ 'localSettings': {
|
|
\ '.*': {
|
|
\ 'cmdline': 'neovim',
|
|
\ 'priority': 0,
|
|
\ 'selector': 'textarea',
|
|
\ 'takeover': 'never',
|
|
\ },
|
|
\ }
|
|
\ }
|
|
|
|
function s:setup_firenvim() abort
|
|
set signcolumn=no
|
|
set noruler
|
|
set noshowcmd
|
|
set laststatus=0
|
|
set showtabline=0
|
|
endfunction
|
|
|
|
augroup firenvim
|
|
autocmd!
|
|
autocmd BufEnter * call s:setup_firenvim()
|
|
autocmd BufEnter sqlzoo*.txt set filetype=sql
|
|
autocmd BufEnter github.com_*.txt set filetype=markdown
|
|
autocmd BufEnter stackoverflow.com_*.txt set filetype=markdown
|
|
augroup END
|
|
endif
|
|
|
|
""""""""""""""""""""""""""""""nvim-gdb settings""""""""""""""""""""""""""""""
|
|
nnoremap <leader>dp :<C-U>GdbStartPDB python -m pdb %<CR>
|
|
|
|
""""""""""""""""""""""""""""""wilder.nvim settings""""""""""""""""""""""""""""""
|
|
call timer_start(250, { -> s:wilder_init() })
|
|
|
|
function! s:wilder_init() abort
|
|
try
|
|
call wilder#setup({
|
|
\ 'modes': [':', '/', '?'],
|
|
\ 'next_key': '<Tab>',
|
|
\ 'previous_key': '<S-Tab>',
|
|
\ 'accept_key': '<C-y>',
|
|
\ 'reject_key': '<C-e>'
|
|
\ })
|
|
|
|
call wilder#set_option('pipeline', [
|
|
\ wilder#branch(
|
|
\ wilder#cmdline_pipeline({
|
|
\ 'language': 'python',
|
|
\ 'fuzzy': 1,
|
|
\ 'sorter': wilder#python_difflib_sorter(),
|
|
\ 'debounce': 30,
|
|
\ }),
|
|
\ wilder#python_search_pipeline({
|
|
\ 'pattern': wilder#python_fuzzy_pattern(),
|
|
\ 'sorter': wilder#python_difflib_sorter(),
|
|
\ 'engine': 're',
|
|
\ 'debounce': 30,
|
|
\ }),
|
|
\ ),
|
|
\ ])
|
|
|
|
let l:hl = wilder#make_hl('WilderAccent', 'Pmenu', [{}, {}, {'foreground': '#f4468f'}])
|
|
call wilder#set_option('renderer', wilder#popupmenu_renderer({
|
|
\ 'highlighter': wilder#basic_highlighter(),
|
|
\ 'max_height': 15,
|
|
\ 'highlights': {
|
|
\ 'accent': l:hl,
|
|
\ },
|
|
\ 'left': [' ', wilder#popupmenu_devicons(),],
|
|
\ 'right': [' ', wilder#popupmenu_scrollbar(),],
|
|
\ 'apply_incsearch_fix': 0,
|
|
\ }))
|
|
catch /^Vim\%((\a\+)\)\=:E117/
|
|
echohl Error |echomsg "Wilder.nvim missing: run :PackerSync to fix."|echohl None
|
|
endtry
|
|
endfunction
|
|
|
|
""""""""""""""""""""""""""""""vim-auto-save settings""""""""""""""""""""""""""""""
|
|
let g:auto_save = 1 " enable AutoSave on Vim startup
|