summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--init.vim16
-rw-r--r--lua/treesitter-textobjects-setup.lua49
2 files changed, 65 insertions, 0 deletions
diff --git a/init.vim b/init.vim
index dc1b613..d1d8709 100644
--- a/init.vim
+++ b/init.vim
@@ -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,
+ },
+ },
+}
+