Last active
February 1, 2024 20:17
-
-
Save roelandmoors/f9d360290261702cf1664074c6661cc3 to your computer and use it in GitHub Desktop.
neovim
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
call plug#begin() | |
Plug 'preservim/nerdtree' | |
Plug 'tpope/vim-commentary' | |
Plug 'tpope/vim-surround' | |
Plug 'tpope/vim-rails' | |
Plug 'mattn/emmet-vim' | |
Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'} | |
Plug 'nvim-tree/nvim-web-devicons' | |
Plug 'nvim-lua/plenary.nvim' | |
Plug 'akinsho/toggleterm.nvim', {'tag' : '*'} | |
Plug 'nvim-telescope/telescope.nvim', { 'tag': '0.1.4' } | |
Plug 'nvim-telescope/telescope-fzf-native.nvim', { 'do': 'make' } | |
Plug 'neovim/nvim-lspconfig' | |
Plug 'mg979/vim-visual-multi', {'branch': 'master'} | |
Plug 'folke/tokyonight.nvim' | |
call plug#end() | |
"space as leader key | |
let mapleader=' ' | |
colorscheme tokyonight-moon | |
"shared clipboards | |
set clipboard^=unnamed,unnamedplus | |
" don't wrap long lines | |
set nowrap | |
" Save with ctrl s (also in insert mode and then leave insert mode) | |
map <C-s> :update<cr> | |
imap <C-s> <ESC>:update<cr> | |
map H ^ | |
map L $ | |
set scrolloff=5 | |
"jump to tag (ctrl-o jumps back) | |
nnoremap t <C-]> | |
"autosave | |
set autowrite | |
set tabstop=4 | |
set shiftwidth=4 | |
set expandtab | |
" change window also with tab | |
nnoremap <tab> <c-w>w | |
nnoremap <S-tab> <c-w>W | |
noremap <silent> <C-S-Left> :vertical resize -1<CR> | |
noremap <silent> <C-S-Right> :vertical resize +1<CR> | |
" open new splits right (vertical) or below (horizontal) | |
set splitbelow | |
set splitright | |
map <F4> :vsplit<cr> | |
map " :vsplit<cr> | |
"NERDTree | |
map <leader>n :NERDTreeToggle<CR> | |
let NERDTreeQuitOnOpen = 1 | |
"clear search highlight on enter | |
nnoremap <CR> :noh<CR> | |
"highlight selection on yank | |
au TextYankPost * silent! lua vim.highlight.on_yank() | |
"cursorline only in normal mode | |
set cul | |
autocmd InsertEnter * set nocul | |
autocmd InsertLeave * set cul | |
"timeout for leader key and command | |
set timeoutlen=300 | |
" telescope | |
nnoremap <leader><space> <cmd>Telescope find_files<cr> | |
nnoremap <leader>ff <cmd>Telescope find_files<cr> | |
nnoremap <leader>fg <cmd>Telescope live_grep<cr> | |
nnoremap <leader>fb <cmd>Telescope buffers<cr> | |
nnoremap <leader>fh <cmd>Telescope help_tags<cr> | |
lua require('telescope').load_extension('fzf') | |
" Lazygit | |
lua << EOF | |
local Terminal = require('toggleterm.terminal').Terminal | |
local lazygit = Terminal:new({ cmd = "lazygit", hidden = true, direction = 'float' }) | |
function _lazygit_toggle() | |
lazygit:toggle() | |
end | |
vim.api.nvim_set_keymap("n", "<leader>g", "<cmd>lua _lazygit_toggle()<CR>", {noremap = true, silent = true}) | |
EOF | |
" Treesitter | |
lua << EOF | |
require'nvim-treesitter.configs'.setup { | |
ensure_installed = { "lua", "vim", "vimdoc", "query" }, | |
highlight = { | |
enable = true, | |
-- Setting this to true will run `:h syntax` and tree-sitter at the same time. | |
-- Set this to `true` if you depend on 'syntax' being enabled (like for indentation). | |
-- Using this option may slow down your editor, and you may see some duplicate highlights. | |
-- Instead of true it can also be a list of languages | |
additional_vim_regex_highlighting = false, | |
}, | |
} | |
EOF | |
" emmet (,, for completion) | |
let g:user_emmet_leader_key=',' | |
" abbreviations | |
iabbrev erb <%%><Left><Left> | |
lua require('lsp') |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- ~/.config/nvim/lua/lsp.lua | |
-- textDocument/diagnostic support until 0.10.0 is released | |
_timers = {} | |
local function setup_diagnostics(client, buffer) | |
if require("vim.lsp.diagnostic")._enable then | |
return | |
end | |
local diagnostic_handler = function() | |
local params = vim.lsp.util.make_text_document_params(buffer) | |
client.request("textDocument/diagnostic", { textDocument = params }, function(err, result) | |
if err then | |
local err_msg = string.format("diagnostics error - %s", vim.inspect(err)) | |
vim.lsp.log.error(err_msg) | |
end | |
local diagnostic_items = {} | |
if result then | |
diagnostic_items = result.items | |
end | |
vim.lsp.diagnostic.on_publish_diagnostics( | |
nil, | |
vim.tbl_extend("keep", params, { diagnostics = diagnostic_items }), | |
{ client_id = client.id } | |
) | |
end) | |
end | |
diagnostic_handler() -- to request diagnostics on buffer when first attaching | |
vim.api.nvim_buf_attach(buffer, false, { | |
on_lines = function() | |
if _timers[buffer] then | |
vim.fn.timer_stop(_timers[buffer]) | |
end | |
_timers[buffer] = vim.fn.timer_start(200, diagnostic_handler) | |
end, | |
on_detach = function() | |
if _timers[buffer] then | |
vim.fn.timer_stop(_timers[buffer]) | |
end | |
end, | |
}) | |
end | |
require("lspconfig").ruby_ls.setup({ | |
on_attach = function(client, buffer) | |
setup_diagnostics(client, buffer) | |
end, | |
}) | |
require("lspconfig").stylelint_lsp.setup({ | |
filetypes = { "css", "scss" }, | |
root_dir = require("lspconfig").util.root_pattern("package.json", ".git"), | |
settings = { | |
stylelintplus = { | |
-- see available options in stylelint-lsp documentation | |
}, | |
}, | |
on_attach = function(client) | |
client.server_capabilities.document_formatting = false | |
end, | |
}) | |
require'lspconfig'.phpactor.setup{ | |
on_attach = on_attach, | |
init_options = { | |
["language_server_phpstan.enabled"] = false, | |
["language_server_psalm.enabled"] = false, | |
} | |
} | |
-- Global mappings. | |
-- See `:help vim.diagnostic.*` for documentation on any of the below functions | |
vim.keymap.set('n', '<space>e', vim.diagnostic.open_float) | |
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev) | |
vim.keymap.set('n', ']d', vim.diagnostic.goto_next) | |
vim.keymap.set('n', '<space>q', vim.diagnostic.setloclist) | |
-- Use LspAttach autocommand to only map the following keys | |
-- after the language server attaches to the current buffer | |
vim.api.nvim_create_autocmd('LspAttach', { | |
group = vim.api.nvim_create_augroup('UserLspConfig', {}), | |
callback = function(ev) | |
-- Enable completion triggered by <c-x><c-o> | |
vim.bo[ev.buf].omnifunc = 'v:lua.vim.lsp.omnifunc' | |
-- Buffer local mappings. | |
-- See `:help vim.lsp.*` for documentation on any of the below functions | |
local opts = { buffer = ev.buf } | |
vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, opts) | |
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts) | |
vim.keymap.set('n', 'K', vim.lsp.buf.hover, opts) | |
vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, opts) | |
vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, opts) | |
vim.keymap.set('n', '<space>wa', vim.lsp.buf.add_workspace_folder, opts) | |
vim.keymap.set('n', '<space>wr', vim.lsp.buf.remove_workspace_folder, opts) | |
vim.keymap.set('n', '<space>wl', function() | |
print(vim.inspect(vim.lsp.buf.list_workspace_folders())) | |
end, opts) | |
vim.keymap.set('n', '<space>D', vim.lsp.buf.type_definition, opts) | |
vim.keymap.set('n', '<space>rn', vim.lsp.buf.rename, opts) | |
vim.keymap.set({ 'n', 'v' }, '<space>ca', vim.lsp.buf.code_action, opts) | |
vim.keymap.set({ 'n', 'v' }, '<M-CR>', vim.lsp.buf.code_action, opts) | |
vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts) | |
vim.keymap.set('n', '<space>f', function() | |
vim.lsp.buf.format { async = true } | |
end, opts) | |
end, | |
}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment