- 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
+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({})