Last active
December 20, 2022 14:14
-
-
Save magurotuna/ecb9fbfa4093a64a8dc40f30fc4b3749 to your computer and use it in GitHub Desktop.
init.lua
This file contains hidden or 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
| vim.g.mapleader = ' ' | |
| vim.api.nvim_command('filetype plugin indent on') | |
| vim.opt.encoding = 'utf-8' | |
| vim.opt.number = true | |
| vim.opt.ruler = true | |
| vim.opt.autoindent = true | |
| vim.opt.smartindent = true | |
| vim.opt.signcolumn = 'yes' | |
| vim.opt.tabstop = 2 | |
| vim.opt.shiftwidth = 2 | |
| vim.opt.expandtab = true | |
| vim.opt.clipboard = 'unnamedplus,unnamed' | |
| vim.opt.termguicolors = true | |
| vim.opt.autoread = true | |
| vim.opt.swapfile = false | |
| vim.opt.backup = false | |
| vim.opt.writebackup = false | |
| vim.opt.showmatch = true | |
| vim.opt.list = true | |
| vim.opt.listchars = 'tab:▸-,trail:-,extends:»,precedes:«,nbsp:%' | |
| vim.opt.ignorecase = true | |
| vim.opt.smartcase = true | |
| vim.opt.incsearch = true | |
| vim.opt.gdefault = true | |
| vim.opt.wrapscan = true | |
| vim.opt.hlsearch = true | |
| vim.opt.hidden = true | |
| vim.opt.showcmd = true | |
| vim.opt.relativenumber = true | |
| vim.opt.mouse = 'a' | |
| vim.opt.undofile = true | |
| vim.opt.updatetime = 300 | |
| vim.opt.pumblend = 15 | |
| vim.opt.numberwidth = 5 | |
| vim.opt.colorcolumn = '80' | |
| vim.opt.cursorline = true | |
| vim.keymap.set('n', 'j', 'gj') | |
| vim.keymap.set('n', 'k', 'gk') | |
| vim.keymap.set('i', 'jj', '<Esc>', { noremap = true, silent = true }) | |
| vim.keymap.set('i', 'jk', '<Esc>', { noremap = true, silent = true }) | |
| vim.keymap.set('n', '<Esc><Esc>', ':nohlsearch<CR><Esc>') | |
| vim.keymap.set('n', '<leader><leader>', '<C-^>', { noremap = true }) | |
| vim.keymap.set('n', '<leader>w', ':w<CR>') | |
| vim.keymap.set('n', 'n', 'nzz', { noremap = true, silent = true }) | |
| vim.keymap.set('n', 'N', 'Nzz', { noremap = true, silent = true }) | |
| vim.keymap.set('n', '*', '*zz', { noremap = true, silent = true }) | |
| vim.keymap.set('n', '#', '#zz', { noremap = true, silent = true }) | |
| vim.keymap.set('n', 'g*', 'g*zz', { noremap = true, silent = true }) | |
| vim.keymap.set('', 'H', '^', { silent = true }) | |
| vim.keymap.set('', 'L', '$', { silent = true }) | |
| vim.keymap.set('n', 's', '<Nop>', { noremap = true }) | |
| vim.keymap.set('n', 'sj', '<C-w>j', { noremap = true }) | |
| vim.keymap.set('n', 'sk', '<C-w>k', { noremap = true }) | |
| vim.keymap.set('n', 'sl', '<C-w>l', { noremap = true }) | |
| vim.keymap.set('n', 'sh', '<C-w>h', { noremap = true }) | |
| vim.keymap.set('n', 'sJ', '<C-w>J', { noremap = true }) | |
| vim.keymap.set('n', 'sK', '<C-w>K', { noremap = true }) | |
| vim.keymap.set('n', 'sL', '<C-w>L', { noremap = true }) | |
| vim.keymap.set('n', 'sH', '<C-w>H', { noremap = true }) | |
| vim.keymap.set('n', 'ss', ':<C-u>sp<CR>', { noremap = true }) | |
| vim.keymap.set('n', 'sv', ':<C-u>vs<CR>', { noremap = true }) | |
| vim.keymap.set('n', 'sq', ':<C-u>q<CR>', { noremap = true }) | |
| vim.keymap.set('n', 'sQ', ':<C-u>bd<CR>', { noremap = true }) | |
| vim.keymap.set('n', 'st', ':<C-u>tabnew<CR>', { noremap = true }) | |
| vim.keymap.set('n', 'sn', 'gt', { noremap = true }) | |
| vim.keymap.set('n', 'sp', 'gT', { noremap = true }) | |
| vim.keymap.set('c', '<C-a>', '<Home>', { noremap = true }) | |
| vim.keymap.set('c', '<C-b>', '<Left>', { noremap = true }) | |
| vim.keymap.set('c', '<C-d>', '<Del>', { noremap = true }) | |
| vim.keymap.set('c', '<C-e>', '<End>', { noremap = true }) | |
| vim.keymap.set('c', '<C-f>', '<Right>', { noremap = true }) | |
| vim.keymap.set('c', '<C-n>', '<Down>', { noremap = true }) | |
| vim.keymap.set('c', '<C-p>', '<Up>', { noremap = true }) | |
| vim.keymap.set('c', '<M-b>', '<S-Left>', { noremap = true }) | |
| vim.keymap.set('c', '<M-f>', '<S-Right>', { noremap = true }) | |
| vim.cmd([[packadd packer.nvim]]) | |
| require('packer').startup(function (use) | |
| use 'wbthomason/packer.nvim' | |
| use { 'nvim-treesitter/nvim-treesitter', run = ':TSUpdate' } | |
| -- lsp | |
| use 'neovim/nvim-lspconfig' | |
| -- language server management | |
| use 'williamboman/mason.nvim' | |
| use 'williamboman/mason-lspconfig.nvim' | |
| -- wrapper to easily integrate "format-on-save" feature | |
| use "lukas-reineke/lsp-format.nvim" | |
| -- completion | |
| use 'hrsh7th/nvim-cmp' | |
| use 'hrsh7th/cmp-nvim-lsp' | |
| use 'hrsh7th/cmp-buffer' | |
| use 'hrsh7th/cmp-path' | |
| use { | |
| 'nvim-telescope/telescope.nvim', | |
| branch = '0.1.x', | |
| requires = { {'nvim-lua/plenary.nvim'} } | |
| } | |
| -- colorscheme | |
| use 'EdenEast/nightfox.nvim' | |
| use 'rebelot/kanagawa.nvim' | |
| use 'xiyaowong/nvim-transparent' | |
| -- lualine | |
| use { | |
| 'nvim-lualine/lualine.nvim', | |
| requires = { 'kyazdani42/nvim-web-devicons', opt = true } | |
| } | |
| use 'arkav/lualine-lsp-progress' | |
| use { | |
| 'andymass/vim-matchup', | |
| setup = function () | |
| vim.g.matchup_matchparen_offscreen = { method = "popup" } | |
| end | |
| } | |
| use 'lukas-reineke/indent-blankline.nvim' | |
| use 'windwp/nvim-ts-autotag' | |
| use 'lambdalisue/fern.vim' | |
| use 'xiyaowong/nvim-transparent' | |
| use 'lewis6991/gitsigns.nvim' | |
| use 'dinhhuy258/git.nvim' | |
| end) | |
| vim.cmd('colorscheme kanagawa') | |
| require('transparent').setup({ enable = true }) | |
| -- lualine | |
| require('lualine').setup { | |
| sections = { | |
| lualine_c = { | |
| { 'filename', path = 1 }, | |
| 'lsp_progress', | |
| }, | |
| }, | |
| } | |
| -- gitsigns | |
| require('gitsigns').setup() | |
| -- git.nvim | |
| require('git').setup { | |
| keymaps = { | |
| blame = '<leader>gb', | |
| browse = '<leader>go', | |
| }, | |
| } | |
| -- indent-blankline.nvim | |
| require('indent_blankline').setup { | |
| show_current_context = true, | |
| show_current_context_start = true, | |
| } | |
| -- highlight yanked region | |
| vim.cmd('au TextYankPost * silent! lua vim.highlight.on_yank { timeout = 500 }') | |
| require('nvim-ts-autotag').setup() | |
| -- fern.vim | |
| vim.keymap.set('n', '<leader>n', ':<C-u>Fern . -reveal=%<CR>', { noremap = true, silent = true }) | |
| vim.g['fern#disable_default_mappings'] = 1 | |
| vim.g['fern#default_hidden'] = 1 | |
| local fern_custom_id = vim.api.nvim_create_augroup('fern-custom', { clear = true }) | |
| vim.api.nvim_create_autocmd('FileType', { | |
| pattern = 'fern', | |
| callback = function () | |
| vim.keymap.set('n', 'N', '<Plug>(fern-action-new-file)', { buffer = true }) | |
| vim.keymap.set('n', 'K', '<Plug>(fern-action-new-dir)', { buffer = true }) | |
| vim.keymap.set('n', 'c', '<Plug>(fern-action-copy)', { buffer = true }) | |
| vim.keymap.set('n', 'm', '<Plug>(fern-action-move)', { buffer = true }) | |
| vim.keymap.set('n', 'r', '<Plug>(fern-action-rename)', { buffer = true }) | |
| vim.keymap.set('n', 'R', '<Plug>(fern-action-remove)', { buffer = true }) | |
| vim.keymap.set('n', '<CR>', '<Plug>(fern-action-open-or-enter)', { buffer = true }) | |
| vim.keymap.set('n', '-', '<Plug>(fern-action-mark:toggle)', { buffer = true }) | |
| vim.keymap.set('v', '-', '<Plug>(fern-action-mark:toggle)', { buffer = true }) | |
| end, | |
| group = fern_custom_id, | |
| }) | |
| -- telescope | |
| local builtin = require('telescope.builtin') | |
| vim.keymap.set('n', '<C-p>', builtin.find_files, {}) | |
| vim.keymap.set('n', '<leader>s', builtin.live_grep, {}) | |
| vim.keymap.set('n', '<leader>;', builtin.buffers, {}) | |
| local actions = require('telescope.actions') | |
| local my_mappings = { | |
| ['<C-j>'] = { | |
| actions.move_selection_next, | |
| type = 'action', | |
| opts = { nowait = true, silent = true }, | |
| }, | |
| ['<C-k>'] = { | |
| actions.move_selection_previous, | |
| type = 'action', | |
| opts = { nowait = true, silent = true }, | |
| }, | |
| ['<C-[>'] = { | |
| actions.close, | |
| type = 'action', | |
| opts = { nowait = true, silent = true }, | |
| }, | |
| } | |
| require('telescope').setup { | |
| defaults = { | |
| layout_strategy = 'vertical', | |
| mappings = { | |
| i = my_mappings, | |
| n = my_mappings, | |
| }, | |
| }, | |
| } | |
| -- lsp-format | |
| require('lsp-format').setup() | |
| -- lsp | |
| local nvim_lsp = require('lspconfig') | |
| require('mason').setup() | |
| require('mason-lspconfig').setup { | |
| ensure_installed = { | |
| 'sumneko_lua', | |
| 'rust_analyzer', | |
| 'clangd', | |
| 'denols', | |
| 'tsserver', | |
| 'zls', | |
| }, | |
| } | |
| local lsp_keymap_opt = { noremap = true, silent = true } | |
| vim.keymap.set('n', 'gd', builtin.lsp_definitions, lsp_keymap_opt) | |
| vim.keymap.set('n', 'gi', builtin.lsp_implementations, lsp_keymap_opt) | |
| vim.keymap.set('n', 'gy', builtin.lsp_type_definitions, lsp_keymap_opt) | |
| vim.keymap.set('n', '<space>rn', vim.lsp.buf.rename, lsp_keymap_opt) | |
| vim.keymap.set('n', '<space>a', vim.lsp.buf.code_action, lsp_keymap_opt) | |
| vim.keymap.set('n', 'gr', builtin.lsp_references, lsp_keymap_opt) | |
| vim.keymap.set('n', 'gh', vim.lsp.buf.hover, lsp_keymap_opt) | |
| vim.keymap.set('n', 'gq', builtin.diagnostics, lsp_keymap_opt) | |
| require('mason-lspconfig').setup_handlers { | |
| function (server_name) | |
| local lsp_opt = { | |
| on_attach = function (client, bufnr) | |
| -- if the language server supports formatting, it is invoked on save | |
| require('lsp-format').on_attach(client) | |
| -- Do something more | |
| end, | |
| capabilities = require('cmp_nvim_lsp').default_capabilities( | |
| vim.lsp.protocol.make_client_capabilities() | |
| ), | |
| } | |
| local node_root_dir = nvim_lsp.util.root_pattern('package.json', 'tsconfig.json', 'node_modules') | |
| local is_node_repo = node_root_dir(vim.fn.getcwd()) ~= nil | |
| local deno_root_dir = nvim_lsp.util.root_pattern('deno.json', 'deno.jsonc', 'import_map.json') | |
| local is_deno_repo = deno_root_dir(vim.fn.getcwd()) ~= nil | |
| if server_name == 'tsserver' then | |
| if is_node_repo then | |
| lsp_opt.root_dir = node_root_dir | |
| else | |
| return | |
| end | |
| end | |
| if server_name == 'denols' then | |
| if is_deno_repo then | |
| lsp_opt.root_dir = deno_root_dir | |
| lsp_opt.init_options = { | |
| enable = true, | |
| lint = true, | |
| unstable = true, | |
| } | |
| else | |
| return | |
| end | |
| end | |
| nvim_lsp[server_name].setup(lsp_opt) | |
| end, | |
| ['sumneko_lua'] = function () | |
| nvim_lsp.sumneko_lua.setup { | |
| settings = { | |
| Lua = { | |
| diagnostics = { | |
| globals = { 'vim' }, | |
| }, | |
| }, | |
| }, | |
| } | |
| end | |
| } | |
| local cmp = require('cmp') | |
| -- completion | |
| cmp.setup { | |
| mapping = { | |
| ['<C-j>'] = cmp.mapping.select_next_item(), | |
| ['<C-n>'] = cmp.mapping.select_next_item(), | |
| ['<C-k>'] = cmp.mapping.select_prev_item(), | |
| ['<C-p>'] = cmp.mapping.select_prev_item(), | |
| ['<CR>'] = cmp.mapping.confirm({ select = true }), | |
| ['<Tab>'] = cmp.mapping.confirm({ select = true }), | |
| ['C-['] = cmp.mapping.close(), | |
| }, | |
| sources = { | |
| { name = 'nvim_lsp' }, | |
| { name = 'buffer' }, | |
| { name = 'path' }, | |
| } | |
| } | |
| -- treesitter | |
| require('nvim-treesitter.configs').setup { | |
| ensure_installed = { | |
| "typescript", | |
| "tsx", | |
| "go", | |
| "rust", | |
| "cpp", | |
| "yaml", | |
| "vue", | |
| "json", | |
| }, | |
| highlight = { | |
| enable = true, | |
| }, | |
| autotag = { | |
| enable = true, | |
| }, | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment