repos / dotfiles

my dotfiles

commit
5534d93
parent
b19212c
author
Eric Bower
date
2025-07-31 00:02:24 -0400 EDT
feat(nvim): added treesitter textbojects
1 files changed,  +49, -24
M dot_config/nvim/init.lua
+49, -24
  1@@ -1,3 +1,14 @@
  2+--[[
  3+  erock's minimal config
  4+  ======================
  5+
  6+  design goals:
  7+    - single file
  8+    - use native nvim features (>= v0.12)
  9+    - keep default keybindings unless painful otherwise
 10+    - plugins must be integral to workflow
 11+]]
 12+
 13 local o = vim.opt
 14 o.tabstop = 2
 15 o.shiftwidth = 2
 16@@ -9,16 +20,15 @@ o.list = true -- show trailing characters
 17 o.signcolumn = "yes"
 18 o.backspace = "indent,eol,start"
 19 o.shell = "/bin/bash"
 20-o.colorcolumn = "101"
 21+o.colorcolumn = "100"
 22 o.completeopt = { "menuone", "noselect", "popup" }
 23 o.laststatus = 0
 24 o.winborder = "rounded"
 25 o.undofile = true
 26 o.ignorecase = true
 27 o.smartcase = true
 28-local g = vim.g
 29-g.mapleader = ","
 30-g.maplocalleader = ","
 31+vim.g.mapleader = ","
 32+vim.g.maplocalleader = ","
 33 
 34 local opts = { silent = true }
 35 local map = vim.keymap.set
 36@@ -57,28 +67,20 @@ autocmd("Filetype", {
 37 	pattern = { "markdown" },
 38 	command = "setlocal wrap tw=79 formatoptions+=t tabstop=2 shiftwidth=2 softtabstop=2",
 39 })
 40-autocmd("FileType", {
 41-	group = augroup,
 42-	pattern = { "help", "man", "qf", "scratch", "fugitive", "nvim-pack" },
 43-	callback = function(args)
 44-		map("n", "q", "<cmd>quit<cr>", { buffer = args.buf })
 45-	end,
 46-})
 47 
 48 local function setup_lsp()
 49 	map("n", "<leader>e", vim.diagnostic.open_float, opts)
 50 	map("n", "<leader>q", vim.diagnostic.setloclist, opts)
 51 
 52-	local cfg = vim.lsp.enable
 53-	cfg("cssls") -- npm i -g vscode-langservers-extracted
 54-	cfg("gopls")
 55-	cfg("html")
 56-	cfg("jsonls")
 57-	cfg("pyright") -- npm i -g pyright
 58-	cfg("ts_ls") -- npm i -g typescript typescript-language-server
 59-	cfg("lua_ls") -- os package mgr: lua-language-server
 60-	-- cfg("denols")
 61-	-- cfg("zls")
 62+	vim.lsp.enable({
 63+		"cssls", -- npm i -g vscode-langservers-extracted
 64+		"gopls",
 65+		"html",
 66+		"jsonls",
 67+		"lua_ls", -- os package mgr: lua-language-server
 68+		"pyright", -- npm i -g pyright
 69+		"ts_ls", -- npm i -g typescript typescript-language-server
 70+	})
 71 
 72 	local chars = {} -- trigger autocompletion on EVERY keypress
 73 	for i = 32, 126 do
 74@@ -131,8 +133,9 @@ vim.pack.add({
 75 	"https://github.com/karb94/neoscroll.nvim",
 76 	"https://github.com/linrongbin16/gitlinker.nvim",
 77 	"https://github.com/tpope/vim-fugitive",
 78+	{ src = "https://github.com/nvim-treesitter/nvim-treesitter-textobjects", version = "main" },
 79 })
 80-require("dracula").setup({})
 81+require("dracula").setup()
 82 vim.cmd([[colorscheme dracula]])
 83 
 84 local ts_parsers = {
 85@@ -194,6 +197,30 @@ autocmd("FileType", { -- enable treesitter highlighting and indents
 86 
 87 setup_lsp()
 88 setup_fzf()
 89+require("neoscroll").setup({ duration_multiplier = 0.4 })
 90+require("gitlinker").setup()
 91+
 92+require("nvim-treesitter-textobjects").setup({
 93+	select = {
 94+		lookahead = true,
 95+		include_surrounding_whitespace = false,
 96+	},
 97+})
 98+-- va" vi" ci" yi"
 99+local txt = require("nvim-treesitter-textobjects.select")
100+map({ "x", "o" }, "if", function()
101+	txt.select_textobject("@function.inner", "textobjects")
102+end)
103+map({ "x", "o" }, "as", function()
104+	txt.select_textobject("@local.scope", "locals")
105+end)
106+local swp = require("nvim-treesitter-textobjects.swap")
107+map("n", "<leader>a", function()
108+    swp.swap_next "@function.outer"
109+end)
110+map("n", "<leader>A", function()
111+    swp.swap_previous "@function.outer"
112+end)
113 require("treesitter-context").setup({
114 	max_lines = 3,
115 	multiline_threshold = 1,
116@@ -201,5 +228,3 @@ require("treesitter-context").setup({
117 	min_window_height = 20,
118 	line_numbers = true,
119 })
120-require("neoscroll").setup({ duration_multiplier = 0.4 })
121-require("gitlinker").setup({})