Migrate from vim to nvim
This commit is contained in:
parent
c07c1b474b
commit
5005b4c667
|
@ -64,7 +64,7 @@
|
||||||
email = rob@netflux.io
|
email = rob@netflux.io
|
||||||
name = Rob Watson
|
name = Rob Watson
|
||||||
[core]
|
[core]
|
||||||
editor = vim
|
editor = nvim
|
||||||
quotePath = false
|
quotePath = false
|
||||||
commitGraph = true
|
commitGraph = true
|
||||||
pager = delta
|
pager = delta
|
||||||
|
|
|
@ -0,0 +1,611 @@
|
||||||
|
" TODO: remove
|
||||||
|
set runtimepath^=~/.vim runtimepath+=~/.vim/after
|
||||||
|
let &packpath = &runtimepath
|
||||||
|
|
||||||
|
set background=dark
|
||||||
|
syntax on
|
||||||
|
filetype plugin indent on
|
||||||
|
|
||||||
|
let mapleader=','
|
||||||
|
|
||||||
|
" netrw
|
||||||
|
let g:netrw_banner = 0
|
||||||
|
let g:netrw_liststyle = 1
|
||||||
|
let g:netrw_list_hide = '^\.'
|
||||||
|
let g:netrw_winsize=25
|
||||||
|
map <leader>n <esc>:Lexplore<cr>
|
||||||
|
|
||||||
|
" fix helptags for opt/ plugins
|
||||||
|
" https://vi.stackexchange.com/questions/17210/generating-help-tags-for-packages-that-are-loaded-by-vim-8s-package-management
|
||||||
|
command! -nargs=0 -bar Helptags
|
||||||
|
\ for p in glob('~/.vim/pack/git-plugins/opt/*', 1, 1)
|
||||||
|
\| exe 'packadd ' . fnamemodify(p, ':t')
|
||||||
|
\| endfor
|
||||||
|
\| helptags ALL
|
||||||
|
|
||||||
|
set shiftwidth=2
|
||||||
|
set shiftround
|
||||||
|
set tabstop=2
|
||||||
|
set expandtab
|
||||||
|
set smarttab
|
||||||
|
set splitbelow
|
||||||
|
set splitright
|
||||||
|
set encoding=utf-8
|
||||||
|
set hidden
|
||||||
|
set nowrap
|
||||||
|
set smartindent
|
||||||
|
set copyindent
|
||||||
|
set autoindent
|
||||||
|
set hlsearch
|
||||||
|
set showmatch
|
||||||
|
set wildmenu
|
||||||
|
set wildmode=list:full,full
|
||||||
|
set number
|
||||||
|
set relativenumber
|
||||||
|
set ruler
|
||||||
|
set backspace=indent,eol,start
|
||||||
|
set ignorecase
|
||||||
|
set smartcase
|
||||||
|
set incsearch
|
||||||
|
set history=1000
|
||||||
|
set undolevels=1000
|
||||||
|
set title
|
||||||
|
set novisualbell
|
||||||
|
set noerrorbells
|
||||||
|
set nobackup
|
||||||
|
set noswapfile
|
||||||
|
set mouse=a
|
||||||
|
set mousemodel=popup_setpos
|
||||||
|
" https://github.com/tpope/vim-sensible/issues/78:
|
||||||
|
set lazyredraw
|
||||||
|
set timeoutlen=1000
|
||||||
|
set scrolloff=15
|
||||||
|
set dictionary=/usr/share/dict/words
|
||||||
|
" See :help thesaurus
|
||||||
|
set thesaurus=$HOME/Documents/thesaurus/thesaurus_pkg/thesaurus.txt
|
||||||
|
set shortmess+=I
|
||||||
|
set updatetime=250
|
||||||
|
set pastetoggle=<f2>
|
||||||
|
set pumheight=200
|
||||||
|
" Required for nvim-compe:
|
||||||
|
set completeopt=menuone,noselect
|
||||||
|
set complete-=i
|
||||||
|
set nrformats-=octal
|
||||||
|
set ttimeout
|
||||||
|
set ttimeoutlen=100
|
||||||
|
set formatoptions+=j
|
||||||
|
set autoread
|
||||||
|
" https://github.com/tpope/vim-sensible/issues/142:
|
||||||
|
set synmaxcol=500
|
||||||
|
|
||||||
|
" Enable 24-bit colours.
|
||||||
|
" https://github.com/alacritty/alacritty/issues/109#issuecomment-440353106
|
||||||
|
if exists('+termguicolors')
|
||||||
|
let &t_8f="\<Esc>[38;2;%lu;%lu;%lum"
|
||||||
|
let &t_8b="\<Esc>[48;2;%lu;%lu;%lum"
|
||||||
|
set termguicolors
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Colour scheme:
|
||||||
|
packadd! nord-vim " https://github.com/arcticicestudio/nord-vim.git
|
||||||
|
colorscheme nord
|
||||||
|
|
||||||
|
augroup vimrc
|
||||||
|
autocmd!
|
||||||
|
" Automatically load/save views on files.
|
||||||
|
" https://vi.stackexchange.com/posts/13874/revisions
|
||||||
|
autocmd BufWinLeave,BufLeave,BufWritePost,BufHidden,QuitPre ?* nested silent! mkview!
|
||||||
|
autocmd BufWinEnter ?* silent! loadview
|
||||||
|
" set cursor line highlight in insert mode.
|
||||||
|
autocmd InsertEnter * set cul
|
||||||
|
autocmd InsertLeavePre * set nocul
|
||||||
|
" use tabs in .gitconfig
|
||||||
|
autocmd BufEnter .gitconfig setlocal shiftwidth=2 tabstop=2 noexpandtab
|
||||||
|
" Quickfix window is always full-width.
|
||||||
|
" https://github.com/fatih/vim-go/issues/1757#issuecomment-565130503
|
||||||
|
autocmd FileType qf if (getwininfo(win_getid())[0].loclist != 1) | wincmd J | endif
|
||||||
|
" Remove trailing whitespace pre-save:
|
||||||
|
autocmd FileType go,ruby,markdown,rust,python,markdown,lua autocmd BufWritePre <buffer> %s/\s\+$//e
|
||||||
|
augroup end
|
||||||
|
|
||||||
|
" Don't remember the current directory for a given file:
|
||||||
|
set viewoptions-=curdir
|
||||||
|
set viewoptions-=options
|
||||||
|
set sessionoptions-=options
|
||||||
|
|
||||||
|
" Key mappings:
|
||||||
|
nnoremap j gj
|
||||||
|
nnoremap k gk
|
||||||
|
map <up> <nop>
|
||||||
|
map <down> <nop>
|
||||||
|
map <left> <nop>
|
||||||
|
map <right> <nop>
|
||||||
|
imap <up> <nop>
|
||||||
|
imap <down> <nop>
|
||||||
|
imap <left> <nop>
|
||||||
|
imap <right> <nop>
|
||||||
|
nmap ]q :cn<cr>
|
||||||
|
nmap [q :cp<cr>
|
||||||
|
|
||||||
|
nnoremap <silent> <leader>w :w<cr>
|
||||||
|
nnoremap <silent> <leader>/ :nohlsearch<cr>
|
||||||
|
nnoremap <silent> <leader><space> :nohlsearch<cr>
|
||||||
|
" Select just-pasted text:
|
||||||
|
nnoremap <silent> <leader>0 `[v`]
|
||||||
|
" Select just-pasted text and re-indent:
|
||||||
|
nnoremap <silent> <leader>) `[v`]=
|
||||||
|
nnoremap <silent> <leader>1 :set relativenumber!<cr>
|
||||||
|
nnoremap <silent> <leader>! :windo set norelativenumber<cr>
|
||||||
|
nnoremap <leader>m :marks<cr>
|
||||||
|
nnoremap <leader>v :vsplit<cr>
|
||||||
|
nnoremap <leader>s :split<cr>
|
||||||
|
nnoremap <leader>rp "_dd<bar>P
|
||||||
|
|
||||||
|
lua <<EOF
|
||||||
|
function _G.insert_uuid()
|
||||||
|
local uuid = vim.call("system", "uuidprint")
|
||||||
|
vim.call("setreg", "u", uuid)
|
||||||
|
vim.api.nvim_command([[normal! "up]])
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.api.nvim_set_keymap("n", "<leader>uu", [[:lua _G.insert_uuid()<cr>]], {noremap = true, silent = true})
|
||||||
|
vim.api.nvim_set_keymap("i", "<c-d><c-u>", [[<esc>:lua _G.insert_uuid()<cr>a]], {noremap = true, silent = true})
|
||||||
|
EOF
|
||||||
|
|
||||||
|
" Git mappings
|
||||||
|
"
|
||||||
|
" Copy Git permalink to clipboard for either current line or range
|
||||||
|
function! CopyGitURLToLineOrRange() range
|
||||||
|
if a:firstline == a:lastline
|
||||||
|
execute ".GBrowse!"
|
||||||
|
else
|
||||||
|
execute a:firstline . "," . a:lastline . "GBrowse!"
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! OpenGitURLToLineOrRange() range
|
||||||
|
if a:firstline == a:lastline
|
||||||
|
execute ".GBrowse"
|
||||||
|
else
|
||||||
|
execute a:firstline . "," . a:lastline . "GBrowse"
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
nnoremap <leader>ab :Git blame<cr>
|
||||||
|
nnoremap <leader>as :Gstatus<cr>
|
||||||
|
nnoremap <leader>ac :Commits<cr>
|
||||||
|
nnoremap <leader>ah :GitGutterLineHighlightsToggle<cr>
|
||||||
|
nnoremap <leader>aY :call CopyGitURLToLineOrRange()<cr>
|
||||||
|
vnoremap <leader>aY :call CopyGitURLToLineOrRange()<cr>
|
||||||
|
nnoremap <leader>ao :call OpenGitURLToLineOrRange()<cr>
|
||||||
|
nnoremap <leader>ap :execute 'silent !ghpr <c-r><c-f>' \| redraw!<cr>
|
||||||
|
|
||||||
|
" echo filename of current buffer:
|
||||||
|
nmap <leader>fe :echom expand("%:p")<cr>
|
||||||
|
" yank filename of current buffer:
|
||||||
|
function! CopyToDefaultRegister()
|
||||||
|
let @" = expand("%:p")
|
||||||
|
echom expand("%:p")
|
||||||
|
endfunction
|
||||||
|
nmap <leader>fy :call CopyToDefaultRegister()<cr>
|
||||||
|
" and into + register:
|
||||||
|
function! CopyToSystemClipboard()
|
||||||
|
let @* = expand("%:p")
|
||||||
|
let @+ = expand("%:p")
|
||||||
|
echom expand("%:p")
|
||||||
|
endfunction
|
||||||
|
nmap <leader>fY :call CopyToSystemClipboard()<cr>
|
||||||
|
|
||||||
|
" disable Ex mode
|
||||||
|
nnoremap Q <Nop>
|
||||||
|
|
||||||
|
function! ToggleQuickFix()
|
||||||
|
if empty(filter(getwininfo(), 'v:val.quickfix'))
|
||||||
|
copen
|
||||||
|
else
|
||||||
|
cclose
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
nmap <silent> <leader>q :call ToggleQuickFix()<cr>
|
||||||
|
nmap <silent> <leader>l :lclose<cr>
|
||||||
|
|
||||||
|
" vim-markdown configuration:
|
||||||
|
let g:vim_markdown_conceal = 1
|
||||||
|
|
||||||
|
" fzf configuration:
|
||||||
|
let g:fzf_action = {
|
||||||
|
\ 'ctrl-t': 'tab split',
|
||||||
|
\ 'ctrl-s': 'split',
|
||||||
|
\ 'ctrl-v': 'vsplit' }
|
||||||
|
nmap <leader>t :Files<cr>
|
||||||
|
nmap <leader>T :GFiles<cr>
|
||||||
|
nmap <leader>b :Buffers<cr>
|
||||||
|
nmap <leader>gg :Rg<cr>
|
||||||
|
|
||||||
|
" Lightline configuration:
|
||||||
|
packadd! lightline.vim " https://github.com/itchyny/lightline.vim.git
|
||||||
|
set laststatus=2
|
||||||
|
|
||||||
|
function! LightlineLSPErrorText()
|
||||||
|
let l:count = luaeval("vim.lsp.diagnostic.get_count(0, [[Error]])")
|
||||||
|
if l:count == 0
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
return l:count . 'E'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! LightlineLSPWarningText()
|
||||||
|
let l:count = luaeval("vim.lsp.diagnostic.get_count(0, [[Warning]])")
|
||||||
|
if l:count == 0
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
return l:count . 'W'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! LightlineLSPInformationText()
|
||||||
|
let l:count = luaeval("vim.lsp.diagnostic.get_count(0, [[Information]])")
|
||||||
|
if l:count == 0
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
return l:count . 'I'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
let g:lightline = {
|
||||||
|
\ 'colorscheme': 'seoul256',
|
||||||
|
\ 'active': {
|
||||||
|
\ 'left': [ [ 'mode', 'paste' ],
|
||||||
|
\ [ 'readonly', 'filename', 'modified' ],
|
||||||
|
\ [ 'gitbranch' ], ['lsperror', 'lspwarn', 'lspinfo' ] ],
|
||||||
|
\ 'right': [ ['lineinfo'], ['percent'], ['filetype'], ['gobuild'] ],
|
||||||
|
\ },
|
||||||
|
\ 'component_function': {
|
||||||
|
\ 'gobuild': 'go#statusline#Show',
|
||||||
|
\ 'gitbranch': 'FugitiveStatusline',
|
||||||
|
\ },
|
||||||
|
\ 'component_expand': {
|
||||||
|
\ 'lsperror': 'LightlineLSPErrorText',
|
||||||
|
\ 'lspwarn': 'LightlineLSPWarningText',
|
||||||
|
\ 'lspinfo': 'LightlineLSPInformationText',
|
||||||
|
\ },
|
||||||
|
\ 'component_type': {
|
||||||
|
\ 'lsperror': 'error',
|
||||||
|
\ 'lspwarn': 'warning',
|
||||||
|
\ },
|
||||||
|
\ 'mode_map': {
|
||||||
|
\ 'n' : 'N',
|
||||||
|
\ 'i' : 'I',
|
||||||
|
\ 'R' : 'R',
|
||||||
|
\ 'v' : 'V',
|
||||||
|
\ 'V' : 'V-LINE',
|
||||||
|
\ "\<C-v>": 'V-BLOCK',
|
||||||
|
\ 'c' : 'C',
|
||||||
|
\ 's' : 'S',
|
||||||
|
\ 'S' : 'S-LINE',
|
||||||
|
\ "\<C-s>": 'S-BLOCK',
|
||||||
|
\ 't': 'TERM',
|
||||||
|
\ },
|
||||||
|
\ }
|
||||||
|
|
||||||
|
" vim-gitgutter configuration
|
||||||
|
packadd! vim-gitgutter " https://github.com/airblade/vim-gitgutter.git
|
||||||
|
set signcolumn=yes
|
||||||
|
nmap ]h <Plug>(GitGutterNextHunk)
|
||||||
|
nmap [h <Plug>(GitGutterPrevHunk)
|
||||||
|
omap ih <Plug>(GitGutterTextObjectInnerPending)
|
||||||
|
omap ah <Plug>(GitGutterTextObjectOuterPending)
|
||||||
|
xmap ih <Plug>(GitGutterTextObjectInnerVisual)
|
||||||
|
xmap ah <Plug>(GitGutterTextObjectOuterVisual)
|
||||||
|
|
||||||
|
" vim-fugitive
|
||||||
|
packadd! vim-fugitive " https://github.com/tpope/vim-fugitive.git
|
||||||
|
|
||||||
|
" vim-go
|
||||||
|
" Doesn't work in after/ftplugin/go.vim:
|
||||||
|
let g:go_def_mapping_enabled = 0
|
||||||
|
packadd! vim-go " https://github.com/fatih/vim-go.git
|
||||||
|
|
||||||
|
" load internal plugins:
|
||||||
|
runtime macros/matchit.vim
|
||||||
|
|
||||||
|
" load other plugins:
|
||||||
|
packadd! rust.vim " https://github.com/rust-lang/rust.vim.git
|
||||||
|
packadd! tmux-complete.vim " https://github.com/wellle/tmux-complete.vim.git
|
||||||
|
packadd! vim-commentary " https://github.com/tpope/vim-commentary.git
|
||||||
|
|
||||||
|
" Requires both fzf.vim plugin to be manually installed:
|
||||||
|
" https://github.com/junegunn/fzf/blob/master/plugin/fzf.vim
|
||||||
|
" and also this separate plugin, which is loaded here:
|
||||||
|
packadd! fzf.vim " https://github.com/junegunn/fzf.vim.git
|
||||||
|
packadd! vim-surround " https://github.com/tpope/vim-surround.git
|
||||||
|
packadd! vim-rhubarb " https://github.com/tpope/vim-rhubarb.git
|
||||||
|
packadd! editorconfig-vim " https://github.com/editorconfig/editorconfig-vim.git
|
||||||
|
packadd! vim-wordmotion " https://github.com/chaoren/vim-wordmotion.git
|
||||||
|
|
||||||
|
" enable inline vim highlighting:
|
||||||
|
let g:vimsyn_embed= 'lPr'
|
||||||
|
|
||||||
|
" Treesitter
|
||||||
|
|
||||||
|
packadd! nvim-treesitter " https://github.com/nvim-treesitter/nvim-treesitter.git
|
||||||
|
packadd! nvim-treesitter-textobjects " https://github.com/nvim-treesitter/nvim-treesitter-textobjects.git
|
||||||
|
packadd! nvim-treesitter-refactor " https://github.com/nvim-treesitter/nvim-treesitter-refactor.git
|
||||||
|
packadd! playground " https://github.com/nvim-treesitter/playground.git
|
||||||
|
|
||||||
|
lua <<EOF
|
||||||
|
require 'nvim-treesitter.configs'.setup {
|
||||||
|
ensure_installed = "maintained",
|
||||||
|
highlight = {
|
||||||
|
enable = true,
|
||||||
|
},
|
||||||
|
incremental_selection = {
|
||||||
|
enable = true,
|
||||||
|
},
|
||||||
|
indent = {
|
||||||
|
enable = false,
|
||||||
|
},
|
||||||
|
textobjects = {
|
||||||
|
select = {
|
||||||
|
enable = true,
|
||||||
|
lookahead = true,
|
||||||
|
keymaps = {
|
||||||
|
["ak"] = "@keyed_element.outer",
|
||||||
|
["av"] = "@keyed_element.inner",
|
||||||
|
["ia"] = "@parameter.inner",
|
||||||
|
["aa"] = "@parameter.outer",
|
||||||
|
["ac"] = "@comment.outer",
|
||||||
|
["at"] = "@statement.outer",
|
||||||
|
["ar"] = "@return",
|
||||||
|
["af"] = "@function.outer",
|
||||||
|
["if"] = "@function.inner",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
move = {
|
||||||
|
enable = true,
|
||||||
|
set_jumps = true,
|
||||||
|
goto_next_start = {
|
||||||
|
["]a"] = "@parameter.inner",
|
||||||
|
["]f"] = "@function.outer",
|
||||||
|
["]F"] = "@function.inner",
|
||||||
|
},
|
||||||
|
goto_previous_start = {
|
||||||
|
["[a"] = "@parameter.inner",
|
||||||
|
["[f"] = "@function.outer",
|
||||||
|
["[F"] = "@function.inner",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
refactor = {
|
||||||
|
-- TODO: navigation broken.
|
||||||
|
navigation = {
|
||||||
|
enable = true,
|
||||||
|
keymaps = {
|
||||||
|
goto_next_usage = "]r",
|
||||||
|
goto_previous_usage = "[r",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
lsp_interop = {
|
||||||
|
enable = true,
|
||||||
|
peek_definition_code = {
|
||||||
|
["<leader>d"] = "@class.outer",
|
||||||
|
["<leader>d"] = "@function.outer",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
playground = {
|
||||||
|
enable = true,
|
||||||
|
disable = {},
|
||||||
|
updatetime = 25,
|
||||||
|
persist_queries = false,
|
||||||
|
keybindings = {
|
||||||
|
toggle_query_editor = 'o',
|
||||||
|
toggle_hl_groups = 'i',
|
||||||
|
toggle_injected_languages = 't',
|
||||||
|
toggle_anonymous_nodes = 'a',
|
||||||
|
toggle_language_display = 'I',
|
||||||
|
focus_language = 'f',
|
||||||
|
unfocus_language = 'F',
|
||||||
|
update = 'R',
|
||||||
|
goto_node = '<cr>',
|
||||||
|
show_help = '?',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
" LSP
|
||||||
|
|
||||||
|
packadd! nvim-lspconfig " https://github.com/neovim/nvim-lspconfig.git
|
||||||
|
packadd! lsp_signature.nvim " https://github.com/ray-x/lsp_signature.nvim.git
|
||||||
|
packadd! fzf-lsp.nvim " https://github.com/gfanto/fzf-lsp.nvim.git
|
||||||
|
|
||||||
|
lua <<EOF
|
||||||
|
local nvim_lsp = require('lspconfig')
|
||||||
|
local on_attach = function(client, bufnr)
|
||||||
|
-- nvim does not expose autocmd via Lua API yet:
|
||||||
|
vim.api.nvim_exec([[autocmd User LspDiagnosticsChanged call lightline#update()]], false)
|
||||||
|
|
||||||
|
local opts = { noremap=true, silent=false }
|
||||||
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gd', '<Cmd>lua vim.lsp.buf.definition()<CR>', opts)
|
||||||
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gD', '<Cmd>lua vim.lsp.buf.type_definition()<CR>', opts)
|
||||||
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>gd', '<Cmd>lua vim.lsp.buf.definition()<CR>', opts)
|
||||||
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>gD', '<Cmd>lua vim.lsp.buf.type_definition()<CR>', opts)
|
||||||
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>e', '<Cmd>lua vim.lsp.buf.rename()<CR>', opts)
|
||||||
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>r', '<Cmd>lua vim.lsp.buf.references()<CR>', opts)
|
||||||
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>i', '<Cmd>lua vim.lsp.buf.implementation()<CR>', opts)
|
||||||
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>ca', '<Cmd>lua vim.lsp.buf.code_action()<CR>', opts)
|
||||||
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>ci', '<Cmd>lua vim.lsp.buf.incoming_calls()<CR>', opts)
|
||||||
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>co', '<Cmd>lua vim.lsp.buf.outgoing_calls()<CR>', opts)
|
||||||
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', 'K', '<Cmd>lua vim.lsp.buf.hover()<CR>', opts)
|
||||||
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', ']e', '<Cmd>lua vim.lsp.diagnostic.goto_next({severity="Error"})<CR>', opts)
|
||||||
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', '[e', '<Cmd>lua vim.lsp.diagnostic.goto_prev({severity="Error"})<CR>', opts)
|
||||||
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', ']d', '<Cmd>lua vim.lsp.diagnostic.goto_next()<CR>', opts)
|
||||||
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', '[d', '<Cmd>lua vim.lsp.diagnostic.goto_prev()<CR>', opts)
|
||||||
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', 'cd', '<Cmd>lua vim.lsp.diagnostic.clear(0)<CR>', opts)
|
||||||
|
|
||||||
|
-- fzf triggers:
|
||||||
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>fr', '<Cmd>References<CR>', opts)
|
||||||
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>fi', '<Cmd>Implementations<CR>', opts)
|
||||||
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>fs', '<Cmd>DocumentSymbols<CR>', opts)
|
||||||
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>fw', '<Cmd>WorkspaceSymbols<CR>', opts)
|
||||||
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>fc', '<Cmd>CodeActions<CR>', opts)
|
||||||
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>fci', '<Cmd>IncomingCalls<CR>', opts)
|
||||||
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>fco', '<Cmd>OutgoingCalls<CR>', opts)
|
||||||
|
|
||||||
|
require 'lsp_signature'.on_attach({
|
||||||
|
hint_enable = false,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Go
|
||||||
|
|
||||||
|
local capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||||
|
capabilities.textDocument.completion.completionItem.snippetSupport = true
|
||||||
|
capabilities.textDocument.completion.completionItem.resolveSupport = {
|
||||||
|
properties = {
|
||||||
|
'documentation',
|
||||||
|
'detail',
|
||||||
|
'additionalTextEdits',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
nvim_lsp.gopls.setup{
|
||||||
|
settings = {
|
||||||
|
gopls = {
|
||||||
|
staticcheck = true,
|
||||||
|
analyses = {
|
||||||
|
unusedparams = true,
|
||||||
|
shadow = true,
|
||||||
|
unusedwrite = true,
|
||||||
|
unusedresult = true,
|
||||||
|
nilness = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
capabilities = capabilities,
|
||||||
|
on_attach = on_attach,
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Ruby
|
||||||
|
|
||||||
|
nvim_lsp.solargraph.setup{
|
||||||
|
on_attach = on_attach,
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Lua
|
||||||
|
|
||||||
|
local system_name
|
||||||
|
if vim.fn.has("mac") == 1 then
|
||||||
|
system_name = "macOS"
|
||||||
|
elseif vim.fn.has("unix") == 1 then
|
||||||
|
system_name = "Linux"
|
||||||
|
else
|
||||||
|
print("Unsupported system for sumneko")
|
||||||
|
end
|
||||||
|
|
||||||
|
local sumneko_root_path = os.getenv("HOME").."/dev/lua-language-server"
|
||||||
|
local sumneko_binary = sumneko_root_path.."/bin/"..system_name.."/lua-language-server"
|
||||||
|
|
||||||
|
local runtime_path = vim.split(package.path, ';')
|
||||||
|
table.insert(runtime_path, "lua/?.lua")
|
||||||
|
table.insert(runtime_path, "lua/?/init.lua")
|
||||||
|
|
||||||
|
nvim_lsp.sumneko_lua.setup {
|
||||||
|
cmd = {sumneko_binary, "-E", sumneko_root_path .. "/main.lua"};
|
||||||
|
settings = {
|
||||||
|
Lua = {
|
||||||
|
runtime = {
|
||||||
|
version = 'LuaJIT',
|
||||||
|
path = runtime_path,
|
||||||
|
},
|
||||||
|
diagnostics = {
|
||||||
|
globals = {'vim'},
|
||||||
|
},
|
||||||
|
workspace = {
|
||||||
|
library = vim.api.nvim_get_runtime_file("", true),
|
||||||
|
},
|
||||||
|
telemetry = {
|
||||||
|
enable = false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
on_attach = on_attach,
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
" nvim-compe:
|
||||||
|
|
||||||
|
packadd! nvim-compe " https://github.com/hrsh7th/nvim-compe
|
||||||
|
packadd! compe-tmux " https://github.com/andersevenrud/compe-tmux
|
||||||
|
|
||||||
|
lua <<EOF
|
||||||
|
require 'compe'.setup {
|
||||||
|
enabled = true;
|
||||||
|
autocomplete = true;
|
||||||
|
debug = false;
|
||||||
|
min_length = 1;
|
||||||
|
preselect = 'enable';
|
||||||
|
throttle_time = 80;
|
||||||
|
source_timeout = 200;
|
||||||
|
resolve_timeout = 800;
|
||||||
|
incomplete_delay = 400;
|
||||||
|
max_abbr_width = 100;
|
||||||
|
max_kind_width = 100;
|
||||||
|
max_menu_width = 100;
|
||||||
|
documentation = true;
|
||||||
|
|
||||||
|
source = {
|
||||||
|
path = true;
|
||||||
|
buffer = true;
|
||||||
|
calc = true;
|
||||||
|
nvim_lsp = true;
|
||||||
|
nvim_lua = true;
|
||||||
|
vsnip = false;
|
||||||
|
ultisnips = false;
|
||||||
|
tmux = true;
|
||||||
|
treesitter = false;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
inoremap <silent><expr> <C-y> compe#confirm('<C-y>')
|
||||||
|
inoremap <silent><expr> <C-e> compe#close('<C-e>')
|
||||||
|
inoremap <silent><expr> <C-f> compe#scroll({ 'delta': +4 })
|
||||||
|
inoremap <silent><expr> <C-d> compe#scroll({ 'delta': -4 })
|
||||||
|
|
||||||
|
" TAB navigation support:
|
||||||
|
lua <<EOF
|
||||||
|
local t = function(str)
|
||||||
|
return vim.api.nvim_replace_termcodes(str, true, true, true)
|
||||||
|
end
|
||||||
|
|
||||||
|
local check_back_space = function()
|
||||||
|
local col = vim.fn.col('.') - 1
|
||||||
|
if col == 0 or vim.fn.getline('.'):sub(col, col):match('%s') then
|
||||||
|
return true
|
||||||
|
else
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
_G.tab_complete = function()
|
||||||
|
if vim.fn.pumvisible() == 1 then
|
||||||
|
return t "<C-n>"
|
||||||
|
elseif check_back_space() then
|
||||||
|
return t "<Tab>"
|
||||||
|
else
|
||||||
|
return vim.fn['compe#complete']()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
_G.s_tab_complete = function()
|
||||||
|
if vim.fn.pumvisible() == 1 then
|
||||||
|
return t "<C-p>"
|
||||||
|
else
|
||||||
|
return t "<S-Tab>"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.api.nvim_set_keymap("i", "<Tab>", "v:lua.tab_complete()", {expr = true})
|
||||||
|
vim.api.nvim_set_keymap("s", "<Tab>", "v:lua.tab_complete()", {expr = true})
|
||||||
|
vim.api.nvim_set_keymap("i", "<S-Tab>", "v:lua.s_tab_complete()", {expr = true})
|
||||||
|
vim.api.nvim_set_keymap("s", "<S-Tab>", "v:lua.s_tab_complete()", {expr = true})
|
||||||
|
EOF
|
|
@ -0,0 +1,20 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Clone or update nvim to $HOME/dev/neovim, build and install to $HOME/local
|
||||||
|
set -e
|
||||||
|
|
||||||
|
mkdir -p $HOME/dev
|
||||||
|
destdir=$HOME/dev/neovim
|
||||||
|
if [ -d $destdir ]; then
|
||||||
|
echo "Updating nvim..."
|
||||||
|
cd $destdir
|
||||||
|
git pull --rebase
|
||||||
|
else
|
||||||
|
echo "Cloning nvim..."
|
||||||
|
cd $HOME/dev
|
||||||
|
git clone -q https://github.com/neovim/neovim.git neovim
|
||||||
|
cd $destdir
|
||||||
|
fi
|
||||||
|
|
||||||
|
make CMAKE_BUILD_TYPE=Release CMAKE_INSTALL_PREFIX=$HOME/local
|
||||||
|
make install
|
|
@ -17,7 +17,7 @@ pluginhome=$HOME/.vim/pack/git-plugins/opt
|
||||||
mkdir -p $pluginhome
|
mkdir -p $pluginhome
|
||||||
cd $pluginhome
|
cd $pluginhome
|
||||||
|
|
||||||
grep packadd! $HOME/.vimrc | grep -o 'https.*$' | while read -r url ; do
|
grep packadd! $HOME/.config/nvim/init.vim | grep -o 'https.*$' | while read -r url ; do
|
||||||
dirname=$(basename $url .git)
|
dirname=$(basename $url .git)
|
||||||
if [ -d "$dirname" ]; then
|
if [ -d "$dirname" ]; then
|
||||||
echo "Exists: $dirname"
|
echo "Exists: $dirname"
|
||||||
|
|
|
@ -15,7 +15,7 @@ else
|
||||||
fi
|
fi
|
||||||
tmux new -d -s $sessionname
|
tmux new -d -s $sessionname
|
||||||
tmux rename-window -t $sessionname:1 cli
|
tmux rename-window -t $sessionname:1 cli
|
||||||
tmux new-window -t $sessionname -n vim vim
|
tmux new-window -t $sessionname -n vim nvim
|
||||||
tmux select-window -t $sessionname:1
|
tmux select-window -t $sessionname:1
|
||||||
# https://github.com/tmux/tmux/issues/2064
|
# https://github.com/tmux/tmux/issues/2064
|
||||||
sleep 0.5
|
sleep 0.5
|
||||||
|
|
|
@ -5,5 +5,11 @@
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
updatealacritty
|
updatealacritty
|
||||||
updatevim
|
updatenvim
|
||||||
updatevimplugins
|
updatevimplugins
|
||||||
|
|
||||||
|
echo "Installing gopls..."
|
||||||
|
cd $HOME
|
||||||
|
go get golang.org/x/tools/gopls@latest
|
||||||
|
|
||||||
|
echo "Done"
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
installnvim
|
|
@ -0,0 +1,5 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# uuidprint - generate and print a lower-case UUID v4
|
||||||
|
|
||||||
|
uuidgen | tr '[:upper:]' '[:lower:]' | tr -d '\n'
|
|
@ -1,6 +1,6 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
#
|
#
|
||||||
# uuidc - generate and copy a lower-case UUID v4
|
# uuidyank - generate and copy a lower-case UUID v4
|
||||||
|
|
||||||
# TODO: fix for Linux
|
# TODO: fix for Linux
|
||||||
uuidgen | tr '[:upper:]' '[:lower:]' | tr -d '\n' | pbcopy
|
uuidprint | pbcopy
|
||||||
|
|
|
@ -23,7 +23,7 @@ bind-key v split-window -h
|
||||||
bind-key s split-window -v
|
bind-key s split-window -v
|
||||||
bind-key p new-window \; set window-status-style fg=white,bg=red
|
bind-key p new-window \; set window-status-style fg=white,bg=red
|
||||||
bind-key c new-window -n 'cli'
|
bind-key c new-window -n 'cli'
|
||||||
bind-key e new-window -n 'vim' vim
|
bind-key e new-window -n 'vim' nvim
|
||||||
bind-key C rename-window 'cli'
|
bind-key C rename-window 'cli'
|
||||||
bind-key E rename-window 'vim'
|
bind-key E rename-window 'vim'
|
||||||
|
|
||||||
|
|
|
@ -29,13 +29,15 @@ nnoremap <silent> ds :GoDebugStep<cr>
|
||||||
|
|
||||||
" Vim-Go configuration
|
" Vim-Go configuration
|
||||||
let g:go_gopls_enabled = 0
|
let g:go_gopls_enabled = 0
|
||||||
let g:go_fmt_autosave = 0
|
let g:go_fmt_autosave = 1
|
||||||
let g:go_imports_autosave = 0
|
let g:go_imports_autosave = 0
|
||||||
|
let g:go_textobj_enabled = 0
|
||||||
let g:go_auto_sameids = 0
|
let g:go_auto_sameids = 0
|
||||||
let g:go_auto_type_info = 0
|
let g:go_auto_type_info = 0
|
||||||
let g:go_code_completion_enabled = 0
|
let g:go_code_completion_enabled = 0
|
||||||
let g:go_echo_command_info = 0
|
let g:go_echo_command_info = 0
|
||||||
let g:go_echo_go_info = 0
|
let g:go_echo_go_info = 0
|
||||||
|
let g:go_textobj_enabled = 0
|
||||||
let g:go_highlight_diagnostic_errors = 0
|
let g:go_highlight_diagnostic_errors = 0
|
||||||
let g:go_highlight_diagnostic_warnings = 0
|
let g:go_highlight_diagnostic_warnings = 0
|
||||||
let g:go_highlight_trailing_whitespace_error=0
|
let g:go_highlight_trailing_whitespace_error=0
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
;; key/value-like types. Works with struct values, struct definitions and parameter value/type pairs:
|
||||||
|
;;
|
||||||
|
;; @keyed_element.outer => key and value
|
||||||
|
;; @keyed_element.inner => value
|
||||||
|
|
||||||
|
(keyed_element (_) . (_) @keyed_element.inner) @keyed_element.outer
|
||||||
|
(field_declaration type: (_) @keyed_element.inner) @keyed_element.outer
|
||||||
|
(parameter_declaration type: (_) @keyed_element.inner) @keyed_element.outer
|
||||||
|
|
||||||
|
;; return statement
|
||||||
|
|
||||||
|
(return_statement (_) @return)
|
||||||
|
|
||||||
|
;; functions and methods with an optional preceeding comment:
|
||||||
|
;;
|
||||||
|
;; TODO: comment only matches a single line.
|
||||||
|
|
||||||
|
((
|
||||||
|
(comment)? @_start
|
||||||
|
.
|
||||||
|
(method_declaration) @_end
|
||||||
|
) (make-range! "function_with_comment" @_start @_end))
|
||||||
|
|
||||||
|
((
|
||||||
|
(comment)? @_start
|
||||||
|
.
|
||||||
|
(function_declaration) @_end
|
||||||
|
) (make-range! "function_with_comment" @_start @_end))
|
4
zshenv
4
zshenv
|
@ -4,8 +4,8 @@
|
||||||
export TERM=xterm-256color
|
export TERM=xterm-256color
|
||||||
|
|
||||||
export XDG_CONFIG_HOME="$HOME/.config"
|
export XDG_CONFIG_HOME="$HOME/.config"
|
||||||
export EDITOR="vim"
|
export EDITOR="nvim"
|
||||||
export VISUAL="vim"
|
export VISUAL="nvim"
|
||||||
|
|
||||||
# ZSH:
|
# ZSH:
|
||||||
export ZDOTDIR="$XDG_CONFIG_HOME/zsh"
|
export ZDOTDIR="$XDG_CONFIG_HOME/zsh"
|
||||||
|
|
1
zshrc
1
zshrc
|
@ -94,6 +94,7 @@ alias rgt="rg -g '*\_test.go' -g '!vendor/'"
|
||||||
alias tm="tmux attach"
|
alias tm="tmux attach"
|
||||||
alias tmd="tmux new -s default -c $HOME || tmux attach -t default"
|
alias tmd="tmux new -s default -c $HOME || tmux attach -t default"
|
||||||
alias tms="tmuxsess"
|
alias tms="tmuxsess"
|
||||||
|
alias vim="nvim"
|
||||||
alias wg="sudo wg"
|
alias wg="sudo wg"
|
||||||
alias wgdown="sudo wgdown"
|
alias wgdown="sudo wgdown"
|
||||||
alias wgup="sudo wgup"
|
alias wgup="sudo wgup"
|
||||||
|
|
Loading…
Reference in New Issue