include i3 and nvim configuration in the central repository, rather than keep them in their seperate respective ones.
This commit is contained in:
74
.config/nvim/lua/plugin/nvim-treesitter.lua
Normal file
74
.config/nvim/lua/plugin/nvim-treesitter.lua
Normal file
@@ -0,0 +1,74 @@
|
||||
---@module 'lazy'
|
||||
---@type LazySpec
|
||||
return { {
|
||||
'nvim-treesitter/nvim-treesitter', -- highlight, edit, and navigate code
|
||||
event = 'BufReadPre',
|
||||
build = ':TSUpdate',
|
||||
main = 'nvim-treesitter.configs', -- set main module to use for opts
|
||||
opts = {
|
||||
ensure_installed = {
|
||||
'bash', 'c', 'make', 'rust', 'diff',
|
||||
'markdown', 'markdown_inline', 'latex',
|
||||
'vim', 'vimdoc', 'lua', 'luadoc', 'regex',
|
||||
},
|
||||
auto_install = true, -- auto-install languages that are not installed
|
||||
highlight = {
|
||||
enable = true,
|
||||
additional_vim_regex_highlighting = { 'ruby' }, -- some languages depend on vim's regex highlighting system for indent rules
|
||||
},
|
||||
indent = { enable = true, disable = { 'ruby' } },
|
||||
},
|
||||
config = function(_, opts)
|
||||
require('nvim-treesitter.configs').setup(opts)
|
||||
|
||||
-- set the keybind for appending in front of a comment, rather than behind.
|
||||
Map('n', 'A', function()
|
||||
local ts = vim.treesitter -- get reference to treesitter
|
||||
local buf = vim.api.nvim_get_current_buf() -- get the current buffer id
|
||||
local row, col = unpack(vim.api.nvim_win_get_cursor(0)) -- get cursor position
|
||||
|
||||
-- ensure the parser exists
|
||||
local res = nil
|
||||
repeat
|
||||
-- get the parser
|
||||
if not ts.language.get_lang(vim.bo[buf].filetype) then break end
|
||||
local parser = ts.get_parser(buf, nil, { error = false })
|
||||
if not parser then break end
|
||||
|
||||
-- query the buffer using the parser
|
||||
local root = parser:parse()[1]:root()
|
||||
local ok, dat = pcall(ts.query.parse, parser:lang(), [[(comment) @comment]])
|
||||
if not ok or not dat then break end
|
||||
|
||||
-- set the result
|
||||
res = { query = dat, root = root }
|
||||
until true
|
||||
|
||||
-- check if we successfully made a query
|
||||
if res then
|
||||
-- loop through the captures from the query
|
||||
for _, node in res.query:iter_captures(res.root, buf, row - 1, row) do
|
||||
-- ensure the comment is on the same row as the cursor and after the cursor's column
|
||||
local srow, scol, _, _ = node:range() -- extract the starting row and starting column
|
||||
if srow ~= row - 1 or col >= scol then goto continue end
|
||||
|
||||
-- get the line text and remove trailing whitespace
|
||||
local txt = vim.api.nvim_buf_get_lines(buf, srow, srow + 1, true)[1]:sub(0, scol)
|
||||
txt = txt:gsub("%s*$", "")
|
||||
local len = txt:len()
|
||||
|
||||
-- check if we found a match
|
||||
if len > 0 then
|
||||
vim.api.nvim_win_set_cursor(0, { row, len })
|
||||
vim.cmd [[startinsert]]
|
||||
return
|
||||
end
|
||||
::continue:: -- lua is stupid
|
||||
end
|
||||
end
|
||||
|
||||
-- no comment start was found, behave like normal (moves cursor to the end of the line)
|
||||
vim.cmd [[startinsert!]]
|
||||
end, { desc = 'append end of line' })
|
||||
end,
|
||||
} }
|
||||
Reference in New Issue
Block a user