Migrate from vim to nvim
This commit is contained in:
parent
c07c1b474b
commit
5005b4c667
@ -64,7 +64,7 @@
|
||||
email = rob@netflux.io
|
||||
name = Rob Watson
|
||||
[core]
|
||||
editor = vim
|
||||
editor = nvim
|
||||
quotePath = false
|
||||
commitGraph = true
|
||||
pager = delta
|
||||
|
611
nvimrc
Normal file
611
nvimrc
Normal file
@ -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
|
20
script/installnvim
Executable file
20
script/installnvim
Executable file
@ -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
|
||||
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)
|
||||
if [ -d "$dirname" ]; then
|
||||
echo "Exists: $dirname"
|
||||
|
@ -15,7 +15,7 @@ else
|
||||
fi
|
||||
tmux new -d -s $sessionname
|
||||
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
|
||||
# https://github.com/tmux/tmux/issues/2064
|
||||
sleep 0.5
|
||||
|
@ -5,5 +5,11 @@
|
||||
set -e
|
||||
|
||||
updatealacritty
|
||||
updatevim
|
||||
updatenvim
|
||||
updatevimplugins
|
||||
|
||||
echo "Installing gopls..."
|
||||
cd $HOME
|
||||
go get golang.org/x/tools/gopls@latest
|
||||
|
||||
echo "Done"
|
||||
|
1
script/updatenvim
Symbolic link
1
script/updatenvim
Symbolic link
@ -0,0 +1 @@
|
||||
installnvim
|
5
script/uuidprint
Executable file
5
script/uuidprint
Executable file
@ -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
|
||||
#
|
||||
# uuidc - generate and copy a lower-case UUID v4
|
||||
# uuidyank - generate and copy a lower-case UUID v4
|
||||
|
||||
# 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 p new-window \; set window-status-style fg=white,bg=red
|
||||
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 E rename-window 'vim'
|
||||
|
||||
|
@ -29,13 +29,15 @@ nnoremap <silent> ds :GoDebugStep<cr>
|
||||
|
||||
" Vim-Go configuration
|
||||
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_textobj_enabled = 0
|
||||
let g:go_auto_sameids = 0
|
||||
let g:go_auto_type_info = 0
|
||||
let g:go_code_completion_enabled = 0
|
||||
let g:go_echo_command_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_warnings = 0
|
||||
let g:go_highlight_trailing_whitespace_error=0
|
||||
|
28
vim/after/queries/go/textobjects.scm
Normal file
28
vim/after/queries/go/textobjects.scm
Normal file
@ -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 XDG_CONFIG_HOME="$HOME/.config"
|
||||
export EDITOR="vim"
|
||||
export VISUAL="vim"
|
||||
export EDITOR="nvim"
|
||||
export VISUAL="nvim"
|
||||
|
||||
# ZSH:
|
||||
export ZDOTDIR="$XDG_CONFIG_HOME/zsh"
|
||||
|
Loading…
x
Reference in New Issue
Block a user