From d5b58a58b0aab4d97fdf4249cbff147e8c5eeef8 Mon Sep 17 00:00:00 2001 From: Wilson Soetomo Date: Mon, 28 Jul 2025 15:03:20 -0400 Subject: [PATCH] adding autocomplete --- init.lua | 6 ++-- lua/custom/keymaps.lua | 37 ++++++++++++++++++++++++ lua/custom/lsp.lua | 6 ++++ lua/custom/plugins/plugins.lua | 53 ++++++++++++++++++++++++++++++++++ lua/custom/settings.lua | 0 5 files changed, 99 insertions(+), 3 deletions(-) create mode 100644 lua/custom/keymaps.lua create mode 100644 lua/custom/lsp.lua create mode 100644 lua/custom/plugins/plugins.lua create mode 100644 lua/custom/settings.lua diff --git a/init.lua b/init.lua index b98ffc61..a3b5e3ac 100644 --- a/init.lua +++ b/init.lua @@ -248,14 +248,12 @@ rtp:prepend(lazypath) require('lazy').setup({ -- NOTE: Plugins can be added with a link (or for a github repo: 'owner/repo' link). 'NMAC427/guess-indent.nvim', -- Detect tabstop and shiftwidth automatically - -- NOTE: Plugins can also be added by using a table, -- with the first argument being the link and the following -- keys can be used to configure plugin behavior/loading/etc. -- -- Use `opts = {}` to automatically pass options to a plugin's `setup()` function, forcing the plugin to be loaded. -- - -- Alternatively, use `config = function() ... end` for full control over the configuration. -- If you prefer to call `setup` explicitly, use: -- { @@ -984,7 +982,7 @@ require('lazy').setup({ -- This is the easiest way to modularize your config. -- -- Uncomment the following line and add your plugins to `lua/custom/plugins/*.lua` to get going. - -- { import = 'custom.plugins' }, + { import = 'custom.plugins' }, -- -- For additional information with loading, sourcing and examples see `:help lazy.nvim-🔌-plugin-spec` -- Or use telescope! @@ -1012,5 +1010,7 @@ require('lazy').setup({ }, }) +pcall(require, 'custom.keymaps') +pcall(require, 'custom.lsp') -- The line beneath this is called `modeline`. See `:help modeline` -- vim: ts=2 sts=2 sw=2 et diff --git a/lua/custom/keymaps.lua b/lua/custom/keymaps.lua new file mode 100644 index 00000000..aacb9d54 --- /dev/null +++ b/lua/custom/keymaps.lua @@ -0,0 +1,37 @@ +vim.keymap.set('n', '', function() + -- Get the current file's directory (handles unsaved files too) + local cwd = vim.fn.expand '%:p:h' + if cwd == '' then + cwd = vim.fn.getcwd() -- fallback to current working dir + end + + -- Open a horizontal split and terminal + vim.cmd 'split' + vim.cmd 'terminal' + vim.cmd 'startinsert' + + -- Safely cd into the folder, even if it has spaces + vim.fn.chansend(vim.b.terminal_job_id, 'cd "' .. cwd .. '"\n') +end, { desc = "Open terminal in current file's directory" }) + +local harpoon = require 'harpoon' + +vim.keymap.set('n', 'a', function() + harpoon:list():add() +end, { desc = 'Add file to Harpoon' }) +vim.keymap.set('n', 'h', function() + harpoon.ui:toggle_quick_menu(harpoon:list()) +end, { desc = 'Toggle Harpoon menu' }) + +vim.keymap.set('n', '1', function() + harpoon:list():select(1) +end) +vim.keymap.set('n', '2', function() + harpoon:list():select(2) +end) +vim.keymap.set('n', '3', function() + harpoon:list():select(3) +end) +vim.keymap.set('n', '4', function() + harpoon:list():select(4) +end) diff --git a/lua/custom/lsp.lua b/lua/custom/lsp.lua new file mode 100644 index 00000000..e85e5736 --- /dev/null +++ b/lua/custom/lsp.lua @@ -0,0 +1,6 @@ +local lspconfig = require 'lspconfig' +local servers = { 'pyright', 'lua_ls' } + +for _, server in ipairs(servers) do + lspconfig[server].setup {} +end diff --git a/lua/custom/plugins/plugins.lua b/lua/custom/plugins/plugins.lua new file mode 100644 index 00000000..df18bc69 --- /dev/null +++ b/lua/custom/plugins/plugins.lua @@ -0,0 +1,53 @@ +return { + -- Other plugins in here + { + 'stevearc/oil.nvim', + opts = {}, + dependencies = { 'nvim-tree/nvim-web-devicons' }, -- optional icons + keys = { + { 'e', 'Oil', desc = 'Open file explorer (Oil)' }, + }, + }, + { + 'ThePrimeagen/harpoon', + branch = 'harpoon2', + dependencies = { 'nvim-lua/plenary.nvim' }, + config = function() + require('harpoon'):setup() + end, + }, + { + 'hrsh7th/nvim-cmp', + dependencies = { + 'hrsh7th/cmp-nvim-lsp', + 'hrsh7th/cmp-buffer', + 'hrsh7th/cmp-path', + 'L3MON4D3/LuaSnip', + 'saadparwaiz1/cmp_luasnip', + }, + config = function() + local cmp = require 'cmp' + local luasnip = require 'luasnip' + + cmp.setup { + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + mapping = cmp.mapping.preset.insert { + [''] = cmp.mapping.select_next_item(), + [''] = cmp.mapping.select_prev_item(), + [''] = cmp.mapping.confirm { select = true }, + [''] = cmp.mapping.complete(), + }, + sources = cmp.config.sources { + { name = 'nvim_lsp' }, + { name = 'luasnip' }, + { name = 'buffer' }, + { name = 'path' }, + }, + } + end, + }, +} diff --git a/lua/custom/settings.lua b/lua/custom/settings.lua new file mode 100644 index 00000000..e69de29b