summary refs log tree commit diff
path: root/.vim/lua/misc.lua
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--.vim/lua/misc.lua26
1 files changed, 26 insertions, 0 deletions
diff --git a/.vim/lua/misc.lua b/.vim/lua/misc.lua
index 4f2b9dc..0067efb 100644
--- a/.vim/lua/misc.lua
+++ b/.vim/lua/misc.lua
@@ -31,4 +31,30 @@ function M.open_under_cursor(cmd)
   end)
 end
 
+function get_visual_selection()
+  pos1 = vim.fn.getpos("'<")
+  ln1, col1 = pos1[2], pos1[3]
+  pos2 = vim.fn.getpos("'>")
+  ln2, col2 = pos2[2], pos2[3]
+  lines = vim.fn.getline(ln1, ln2)
+  if vim.opt.selection:get() == 'inclusive' then
+    lines[#lines] = lines[#lines]:sub(1,col2)
+  else
+    lines[#lines] = lines[#lines]:sub(1,col2-1)
+  end
+  lines[1] = lines[1]:sub(col1)
+  return pos1, pos2, lines
+end
+
+function M.sort_line()
+  local fn = vim.fn
+  pos1, pos2, lines = get_visual_selection()
+  for i=1, #lines do
+    local ln = pos1[2] + (i-1)
+    local line = fn.join(fn.sort(fn.split(lines[i], " ")))
+    line = fn.substitute(fn.getline(ln), lines[i], line, "")
+    vim.fn.setline(ln, line)
+  end
+end
+
 return M