diff options
author | Josh Rahm <rahm@google.com> | 2023-01-25 23:09:54 +0000 |
---|---|---|
committer | Josh Rahm <rahm@google.com> | 2023-01-25 23:09:54 +0000 |
commit | 3edb113742ea3e555695c5b88eeef2572021d2a8 (patch) | |
tree | ff6e9441a69ff385c8f705be612a02b61b57fc54 | |
parent | 57c7f8c5512a73825f5e37fc94960871096de855 (diff) | |
download | config.vim-3edb113742ea3e555695c5b88eeef2572021d2a8.tar.gz config.vim-3edb113742ea3e555695c5b88eeef2572021d2a8.tar.bz2 config.vim-3edb113742ea3e555695c5b88eeef2572021d2a8.zip |
Add treesitter-textobjects
-rw-r--r-- | init.vim | 16 | ||||
-rw-r--r-- | lua/treesitter-textobjects-setup.lua | 49 |
2 files changed, 65 insertions, 0 deletions
@@ -34,12 +34,14 @@ Plug 'hrsh7th/vim-vsnip' Plug 'kyazdani42/nvim-web-devicons' Plug 'neovim/nvim-lspconfig' Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'} +Plug 'nvim-treesitter/playground' Plug 'onsails/lspkind.nvim' Plug 'nvim-tree/nvim-tree.lua' Plug 'vim-airline/vim-airline' Plug 'nvim-lua/plenary.nvim' Plug 'nvim-telescope/telescope.nvim' +Plug 'nvim-treesitter/nvim-treesitter-textobjects' Plug 'tpope/vim-surround' Plug 'lukas-reineke/indent-blankline.nvim' @@ -73,13 +75,26 @@ noremap Y y$ noremap รบ <cmd>FormatCode<cr> noremap <leader>p <plug>(SynStack) noremap <leader>ff <cmd>Telescope find_files<cr> + inoremap <C-+> <Plug>(vsnip-expand) +" When navigating to the beginning of a line, I want to always reset the screen +" to the leftmost position. +noremap ^ ^zH + augroup InitVim au! autocmd BufRead *.java,*.c,*.cpp,*.cxx TSBufEnable highlight + + " Automatically start insert mode when opening a new terminal. autocmd TermOpen * startinsert + + " When entering a terminal, automatically start "insert" and feed the escape + " key. This ensures the ZSH line-reader is in "normal" mode. I have + " integration with zsh to navigate vim panes from the zsh line editor. + autocmd BufEnter term://* startinsert | call feedkeys("\x1b") + autocmd TextYankPost * \ lua require'vim.highlight'.on_yank( \ { higroup = "IncSearch", timeout = 100 }); @@ -139,6 +154,7 @@ lua << EOF -- Diagnostics require("diagnostics") require("nvim-tree").setup() + require("treesitter-textobjects-setup") require('telescope').setup({ defaults = { diff --git a/lua/treesitter-textobjects-setup.lua b/lua/treesitter-textobjects-setup.lua new file mode 100644 index 0000000..bcb4bd9 --- /dev/null +++ b/lua/treesitter-textobjects-setup.lua @@ -0,0 +1,49 @@ +require'nvim-treesitter.configs'.setup { + textobjects = { + select = { + enable = true, + + -- Automatically jump forward to textobj, similar to targets.vim + lookahead = true, + + keymaps = { + -- You can use the capture groups defined in textobjects.scm + ["am"] = "@function.outer", + ["im"] = "@function.inner", + ["af"] = "@function.outer", + ["if"] = "@function.inner", + ["ac"] = "@class.outer", + ["aa"] = "@parameter.outer", + ["ia"] = "@parameter.inner", + -- You can optionally set descriptions to the mappings (used in the desc parameter of + -- nvim_buf_set_keymap) which plugins like which-key display + ["ic"] = { query = "@class.inner", desc = "Select inner part of a class region" }, + }, + -- You can choose the select mode (default is charwise 'v') + -- + -- Can also be a function which gets passed a table with the keys + -- * query_string: eg '@function.inner' + -- * method: eg 'v' or 'o' + -- and should return the mode ('v', 'V', or '<c-v>') or a table + -- mapping query_strings to modes. + selection_modes = { + ['@parameter.outer'] = 'v', -- charwise + ['@function.outer'] = 'V', -- linewise + ['@function.inner'] = 'V', -- linewise + }, + -- If you set this to `true` (default is `false`) then any textobject is + -- extended to include preceding or succeeding whitespace. Succeeding + -- whitespace has priority in order to act similarly to eg the built-in + -- `ap`. + -- + -- Can also be a function which gets passed a table with the keys + -- * query_string: eg '@function.inner' + -- * selection_mode: eg 'v' + -- and should return true of false + include_surrounding_whitespace = function (q) + return string.match(q.query_string, '.inner$') == nil + end, + }, + }, +} + |