summaryrefslogtreecommitdiffhomepage
path: root/src/blog/nvim-ts/final.lua
diff options
context:
space:
mode:
Diffstat (limited to 'src/blog/nvim-ts/final.lua')
-rw-r--r--src/blog/nvim-ts/final.lua28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/blog/nvim-ts/final.lua b/src/blog/nvim-ts/final.lua
new file mode 100644
index 0000000..948ee30
--- /dev/null
+++ b/src/blog/nvim-ts/final.lua
@@ -0,0 +1,28 @@
+local ts_utils = require('nvim-treesitter.ts_utils')
+
+local function map(lhs, rhs)
+ vim.keymap.set('n', lhs, function()
+ local node = ts_utils.get_node_at_cursor()
+ if node == nil then
+ error('No tree-sitter parser found.')
+ end
+
+ while node ~= nil and node:type() ~= 'operation' do
+ node = node:parent()
+ end
+
+ if node ~= nil then
+ local sr, sc, er, ec = node:child(0):range()
+ vim.api.nvim_buf_set_text(0, sr, sc, er, ec, { rhs })
+ end
+ end, {
+ buffer = true,
+ noremap = true,
+ silent = true,
+ })
+end
+
+map('p', 'pick')
+map('r', 'reword')
+map('s', 'squash')
+map('f', 'fixup')