From 9b587025d39d98ee5a0545e85d3315d3cb232385 Mon Sep 17 00:00:00 2001
From: Sergey Matveev <stargrave@stargrave.org>
Date: Tue, 1 Mar 2022 12:40:43 +0300
Subject: [PATCH] :Align

---
 .../pack/stargrave/start/align/autoload/align.vim   | 13 +++++++++++++
 .../pack/stargrave/start/align/plugin/align.vim     |  2 ++
 2 files changed, 15 insertions(+)
 create mode 100644 vim/.vim/pack/stargrave/start/align/autoload/align.vim
 create mode 100644 vim/.vim/pack/stargrave/start/align/plugin/align.vim

diff --git a/vim/.vim/pack/stargrave/start/align/autoload/align.vim b/vim/.vim/pack/stargrave/start/align/autoload/align.vim
new file mode 100644
index 0000000..869fd50
--- /dev/null
+++ b/vim/.vim/pack/stargrave/start/align/autoload/align.vim
@@ -0,0 +1,13 @@
+" something that won't be met anywhere
+let s:sep = "₀◎○ë"
+
+function! align#do(first, last, sep) abort
+    let in = []
+    for n in range(a:first, a:last)
+        let in = add(in, substitute(getline(n), a:sep, "\t" . s:sep, "g"))
+    endfor
+    let out = systemlist("column -t -s \"\t\"", add(in, ""))
+    for n in range(a:first, a:last)
+        call setline(n, substitute(out[n - a:first], "  " . s:sep, a:sep, "g"))
+    endfor
+endfunction
diff --git a/vim/.vim/pack/stargrave/start/align/plugin/align.vim b/vim/.vim/pack/stargrave/start/align/plugin/align.vim
new file mode 100644
index 0000000..5d95b11
--- /dev/null
+++ b/vim/.vim/pack/stargrave/start/align/plugin/align.vim
@@ -0,0 +1,2 @@
+if exists("*align#do") | finish | endif
+command! -nargs=1 -range Align call align#do(<line1>, <line2>, <f-args>)
-- 
2.50.0