mappings.lua 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. local wk = require("which-key")
  2. local telescope = require("telescope.builtin")
  3. local gitsigns = require("gitsigns")
  4. function FormatBufferLines()
  5. local lines = vim.api.nvim_buf_get_lines(0, 0, -1, false)
  6. local formatted_lines = {}
  7. for _, line in ipairs(lines) do
  8. if #line <= 80 then
  9. table.insert(formatted_lines, line)
  10. else
  11. local words = {}
  12. for word in line:gmatch("%S+") do
  13. table.insert(words, word)
  14. end
  15. local current_line = ""
  16. for _, word in ipairs(words) do
  17. if #current_line + #word + 1 > 80 then
  18. table.insert(formatted_lines, current_line)
  19. current_line = word
  20. else
  21. if current_line ~= "" then
  22. current_line = current_line .. " " .. word
  23. else
  24. current_line = word
  25. end
  26. end
  27. end
  28. if current_line ~= "" then
  29. table.insert(formatted_lines, current_line)
  30. end
  31. end
  32. end
  33. vim.api.nvim_buf_set_lines(0, 0, -1, false, formatted_lines)
  34. print("Buffer formatted: lines wrapped at 80 characters")
  35. end
  36. -- local tree = require "nvim-tree.api"
  37. function FormatBuffer()
  38. -- Save the current cursor position
  39. local cursor_position = vim.fn.getpos(".")
  40. FormatBufferLines();
  41. -- local command = "fmt"
  42. -- -- Run the formatter command on the current buffer
  43. -- vim.cmd(":%! " .. command)
  44. -- Restore the cursor position
  45. vim.fn.setpos(".", cursor_position)
  46. -- local current_file = vim.fn.expand("%:p")
  47. -- local cmd = string.format("typstyle -i %s", current_file)
  48. -- vim.fn.jobstart(cmd, {
  49. -- on_exit = function(_, exit_code)
  50. -- if exit_code == 0 then
  51. -- print("TypestStyle completed successfully")
  52. -- -- vim.cmd('edit!') -- Reload the buffer
  53. -- vim.fn.setpos(".", cursor_position)
  54. -- else
  55. -- print("TypestStyle failed with exit code: " .. exit_code)
  56. -- end
  57. -- end,
  58. -- })
  59. end
  60. function ToggleTree(source)
  61. require("neo-tree.command").execute({
  62. toggle = true,
  63. source = source,
  64. position = "left",
  65. })
  66. end
  67. wk.add({
  68. {
  69. mode = "n",
  70. -- telescope
  71. {
  72. "<leader>ff",
  73. function()
  74. telescope.find_files()
  75. end,
  76. desc = "Find file",
  77. },
  78. {
  79. "<leader>fg",
  80. function()
  81. telescope.live_grep()
  82. end,
  83. desc = "Live grep",
  84. },
  85. {
  86. "<leader>fb",
  87. function()
  88. telescope.buffers()
  89. end,
  90. desc = "List buffers",
  91. },
  92. {
  93. "<leader>fh",
  94. function()
  95. telescope.help_tags()
  96. end,
  97. desc = "Help",
  98. },
  99. {
  100. "<leader>fs",
  101. function()
  102. telescope.lsp_document_symbols()
  103. end,
  104. desc = "Find symbols",
  105. },
  106. {
  107. "zz",
  108. function()
  109. telescope.spell_suggest()
  110. end,
  111. desc = "Suggest spell",
  112. },
  113. {
  114. "zr",
  115. function()
  116. vim.lsp.buf.rename()
  117. end,
  118. desc = "Rename symbol",
  119. },
  120. -- Tests
  121. {
  122. "<leader>tt",
  123. function()
  124. require("neotest").run.run({ extra_args = { "--", "--nocapture" } })
  125. end,
  126. desc = "Test nearest",
  127. },
  128. {
  129. "<leader>tF",
  130. function()
  131. require("neotest").run.run(vim.fn.expand("%"), { extra_args = { "--", "--nocapture" } })
  132. end,
  133. desc = "Test file",
  134. },
  135. {
  136. "<leader>ts",
  137. function()
  138. require("neotest").summary.toggle()
  139. end,
  140. desc = "Test summary",
  141. },
  142. {
  143. "<leader>tO",
  144. function()
  145. require("neotest").output.open({ enter = true })
  146. end,
  147. desc = "Test output",
  148. },
  149. {
  150. "<leader>tq",
  151. function()
  152. require("neotest").run.stop()
  153. end,
  154. desc = "Test stop",
  155. },
  156. {
  157. "<leader>ft",
  158. function()
  159. FormatBuffer()
  160. end,
  161. desc = "Typst fmt",
  162. },
  163. -- Centering cursor
  164. { "n", "nzzzv", desc = "Center cursor when n (next) during search" },
  165. { "N", "Nzzzv", desc = "Center cursor when n (next) during search" },
  166. -- tab
  167. { "<tab>", ":BufferLineCycleNext <CR>", desc = "Next tab" },
  168. { "<S-tab>", ":BufferLineCyclePrev<CR>", desc = "Previous tab" },
  169. -- Comment
  170. { "<leader>/", "gcc", desc = "comment toggle", remap = true },
  171. -- Format
  172. {
  173. "<leader>fm",
  174. function()
  175. require("conform").format({ async = true, lsp_fallback = true })
  176. end,
  177. desc = "format files",
  178. },
  179. -- nvim-tree
  180. -- { "<C-n>", function() tree.tree.toggle() end, desc = "Toggle file tree" },
  181. {
  182. "<C-n>",
  183. function()
  184. -- ToggleTree("filesystem")
  185. -- require("edgy").toggle("left")
  186. require("edgy-group").open_group_offset("left", 1)
  187. end,
  188. desc = "Toggle left panel",
  189. },
  190. {
  191. "<leader>el",
  192. function()
  193. require("trouble").open({
  194. mode = "lsp_document_symbols",
  195. focus = false,
  196. win = { position = "right" },
  197. })
  198. end,
  199. },
  200. {
  201. "<leader>uh",
  202. function()
  203. require("edgy").toggle("left")
  204. end,
  205. desc = "left",
  206. },
  207. -- Lsp
  208. {
  209. "K",
  210. function()
  211. vim.lsp.buf.hover()
  212. end,
  213. desc = "LSP toggle",
  214. },
  215. {
  216. "<leader>ca",
  217. function()
  218. vim.lsp.buf.code_action()
  219. end,
  220. desc = "LSP code action",
  221. },
  222. {
  223. "<leader>cd",
  224. "<cmd>Trouble diagnostics toggle filter.buf=0<cr>",
  225. desc = "LSP code diagnostic",
  226. },
  227. -- Gitsigns
  228. {
  229. "<leader>nc",
  230. function()
  231. gitsigns.nav_hunk("next")
  232. end,
  233. desc = "Next change",
  234. },
  235. {
  236. "<leader>pc",
  237. function()
  238. gitsigns.nav_hunk("prev")
  239. end,
  240. desc = "Previous change",
  241. },
  242. -- increment/decrement numbers
  243. { "<leader>+", "<C-a>", desc = "Increment number" }, -- increment
  244. { "<leader>-", "<C-x>", desc = "Decrement number" }, -- decrement
  245. { "<leader>to", "<cmd>tabnew<CR>", desc = "Open new tab" }, -- open new tab
  246. { "<leader>tx", "<cmd>tabclose<CR>", desc = "Close current tab" }, -- close current tab
  247. { "<leader>tn", "<cmd>tabn<CR>", desc = "Go to next tab" }, -- go to next tab
  248. { "<leader>tp", "<cmd>tabp<CR>", desc = "Go to previous tab" }, -- go to previous tab
  249. { "<leader>tf", "<cmd>tabnew %<CR>", desc = "Open current buffer in new tab" }, -- move current buffer to new tab
  250. {
  251. "<ESC>",
  252. ":noh<CR>",
  253. desc = "clears search highlights",
  254. noremap = true,
  255. silent = true,
  256. },
  257. {
  258. "<leader>ib",
  259. function()
  260. print(vim.bo.filetype)
  261. end,
  262. desc = "Print the filetype of current buffer",
  263. },
  264. -- { "<leader>uh", function() require("edgy").select("left") end, desc = "focus left" },
  265. },
  266. {
  267. mode = "v",
  268. { "<S-j>", ":m '>+1<CR>gv=gv", desc = "Move selection down" },
  269. { "<S-k>", ":m '<-2<CR>gv=gv", desc = "Move selection up" },
  270. -- Comment
  271. { "<leader>/", "gc", desc = "comment toggle", remap = true },
  272. {
  273. "<ESC>",
  274. ":noh<CR>",
  275. desc = "clears search highlights",
  276. noremap = true,
  277. silent = true,
  278. },
  279. },
  280. })