summary refs log tree commit diff
diff options
context:
space:
mode:
authorRobert Günzler <r@gnzler.io>2021-11-02 17:30:24 +0100
committerRobert Günzler <r@gnzler.io>2021-11-02 19:06:47 +0100
commit15a7ac4890dea48be140350c295d4d9ea05292ee (patch)
treee0405ddaa98fa30ec336d2504a244e52b4910524
parent3768a6c1488c148cc07481687a47cb7cce02ad35 (diff)
vim: switch from ultisnips+snippets.nvim to snippy
-rw-r--r--.vim/UltiSnips/all.snippets32
-rw-r--r--.vim/UltiSnips/sh.snippets57
l---------.vim/UltiSnips/vimwiki.snippets1
-rw-r--r--.vim/after/snippets/_.snippets22
-rw-r--r--.vim/after/snippets/dockerfile.snippets.todo (renamed from .vim/UltiSnips/dockerfile.snippets)0
-rw-r--r--.vim/after/snippets/ebuild.snippets.todo (renamed from .vim/UltiSnips/ebuild.snippets)0
-rw-r--r--.vim/after/snippets/go.snippets.todo (renamed from .vim/UltiSnips/go.snippets)0
-rw-r--r--.vim/after/snippets/mail.snippets.todo (renamed from .vim/UltiSnips/mail.snippets)0
-rw-r--r--.vim/after/snippets/markdown.snippets.todo (renamed from .vim/UltiSnips/markdown.snippets)0
-rw-r--r--.vim/after/snippets/sh.snippets48
-rw-r--r--.vim/after/snippets/tex.snippets.todo (renamed from .vim/UltiSnips/tex.snippets)0
-rw-r--r--.vim/autoload/snips.vim8
-rw-r--r--.vim/lua/plugins.lua30
-rw-r--r--.vim/lua/snips.lua150
14 files changed, 123 insertions, 225 deletions
diff --git a/.vim/UltiSnips/all.snippets b/.vim/UltiSnips/all.snippets
deleted file mode 100644
index 0848883..0000000
--- a/.vim/UltiSnips/all.snippets
+++ /dev/null
@@ -1,32 +0,0 @@
-snippet sign "Robert Günzler <r@gnzler.io>"
-Robert Günzler <r@gnzler.io>
-endsnippet
-
-snippet now-utc "YYYY-MM-DDThh:mm:ssZ"
-`now`
-endsnippet
-
-snippet now-loca "YYYY-MM-DDThh:mm:ssZ"
-`now -here`
-endsnippet
-
-snippet today "YYYY-MM-DD"
-`date +%Y-%m-%d`
-endsnippet
-
-snippet todaytime "YYYY-MM-DDThh:mm"
-`date +%Y-%m-%dT%H:%M`
-endsnippet
-
-snippet ok "✔"
-✔
-endsnippet
-snippet bad "✘"
-✘
-endsnippet
-snippet arrow "→"
-→
-endsnippet
-snippet arrowb "⇒"
-⇒
-endsnippet
diff --git a/.vim/UltiSnips/sh.snippets b/.vim/UltiSnips/sh.snippets
deleted file mode 100644
index 76538aa..0000000
--- a/.vim/UltiSnips/sh.snippets
+++ /dev/null
@@ -1,57 +0,0 @@
-snippet skel "skeleton"
-#!/bin/sh
-
-set -e
-[ -n "$DEBUG" ] && set -x
-
-$0
-endsnippet
-
-snippet usage "usage"
-usage() {
-	printf "usage: %s" "$(basename "\$0")\n"
-	printf "\n"
-	printf "$1\n"
-}
-
-case "\$1" in
--h)	usage && exit 0 ;;
-esac
-
-$0
-endsnippet
-
-snippet getopt "while getopts"
-$2=
-while getopts $1h opt; do
-	case "$opt" in
-	$1)	$2=1 ;;
-	h|?)	printf "usage: %s [-h]\n" "$(basename "\$0")"
-		printf "\n"
-		printf "  -$1 \t $2\n"
-		printf "\n"
-		exit 2 ;;
-	esac
-done
-shift $((OPTIND - 1))
-endsnippet
-
-snippet deps "for app in"
-# check requirements
-for tool in $1; do
-	if ! command -v "$tool" >/dev/null; then
-		printf "%s: %s not installed but required\n" "$(basename "\$0")" "$tool" >&2
-		exit 1
-	fi
-done
-
-$0
-endsnippet
-
-snippet doc "script docs"
-#
-# DESCRIPTION:
-#  $1
-#
-$0
-endsnippet
diff --git a/.vim/UltiSnips/vimwiki.snippets b/.vim/UltiSnips/vimwiki.snippets
deleted file mode 120000
index 80d79ae..0000000
--- a/.vim/UltiSnips/vimwiki.snippets
+++ /dev/null
@@ -1 +0,0 @@
-markdown.snippets
\ No newline at end of file
diff --git a/.vim/after/snippets/_.snippets b/.vim/after/snippets/_.snippets
new file mode 100644
index 0000000..7c99bd0
--- /dev/null
+++ b/.vim/after/snippets/_.snippets
@@ -0,0 +1,22 @@
+snippet sign "Robert Günzler <r@gnzler.io>"
+	Robert Günzler <r@gnzler.io>
+snippet me "git user id"
+	`snips#exec('git config --get user.name')` <`snips#exec('git config --get user.email')`>
+snippet today "YYYY-MM-DD"
+	`luaeval("os.date('%Y-%m-%d')")`
+snippet nowutc "YYYY-MM-DDThh:mm:ssZ"
+	`luaeval("os.date('!%Y-%m-%dT%H:%M:%SZ')")`
+snippet nowloc "YYYY-MM-DDThh:mm:ssZ"
+	`luaeval("os.date('%Y-%m-%dT%H:%M:%SZ')")`
+snippet ok "✔"
+	✔ 
+snippet bad "✘"
+	✘ 
+snippet arrow "→"
+	→ 
+snippet arrowb "⇒"
+	⇒ 
+snippet todo "TODO(<user>): ..."
+	`snips#comment('TODO(' .. snips#exec('id -un')  .. '):')` $0
+snippet note "NOTE(<user>): ..."
+	`snips#comment('NOTE(' .. snips#exec('id -un')  .. '):')` $0
diff --git a/.vim/UltiSnips/dockerfile.snippets b/.vim/after/snippets/dockerfile.snippets.todo
index c8d7502..c8d7502 100644
--- a/.vim/UltiSnips/dockerfile.snippets
+++ b/.vim/after/snippets/dockerfile.snippets.todo
diff --git a/.vim/UltiSnips/ebuild.snippets b/.vim/after/snippets/ebuild.snippets.todo
index 6856c61..6856c61 100644
--- a/.vim/UltiSnips/ebuild.snippets
+++ b/.vim/after/snippets/ebuild.snippets.todo
diff --git a/.vim/UltiSnips/go.snippets b/.vim/after/snippets/go.snippets.todo
index 3152e3a..3152e3a 100644
--- a/.vim/UltiSnips/go.snippets
+++ b/.vim/after/snippets/go.snippets.todo
diff --git a/.vim/UltiSnips/mail.snippets b/.vim/after/snippets/mail.snippets.todo
index 1b49c9d..1b49c9d 100644
--- a/.vim/UltiSnips/mail.snippets
+++ b/.vim/after/snippets/mail.snippets.todo
diff --git a/.vim/UltiSnips/markdown.snippets b/.vim/after/snippets/markdown.snippets.todo
index 641e77c..641e77c 100644
--- a/.vim/UltiSnips/markdown.snippets
+++ b/.vim/after/snippets/markdown.snippets.todo
diff --git a/.vim/after/snippets/sh.snippets b/.vim/after/snippets/sh.snippets
new file mode 100644
index 0000000..99b8cb7
--- /dev/null
+++ b/.vim/after/snippets/sh.snippets
@@ -0,0 +1,48 @@
+snippet skel "skeleton"
+	#!/bin/sh
+	
+	set -e
+	[ -n "$DEBUG" ] && set -x
+	
+	$0
+snippet usage "usage"
+	usage() {
+		printf "usage: %s" "$(basename "\$0")\n"
+		printf "\n"
+		printf "$1\n"
+	}
+	
+	case "\$1" in
+	-h)	usage && exit 0 ;;
+	esac
+	
+	$0
+snippet getopt "while getopts"
+	$2=
+	while getopts $1h opt; do
+		case "$opt" in
+		$1)	$2=1 ;;
+		h|?)	printf "usage: %s [-h]\n" "$(basename "\$0")"
+			printf "\n"
+			printf "  -$1 \t $2\n"
+			printf "\n"
+			exit 2 ;;
+		esac
+	done
+	shift $((OPTIND - 1))
+snippet deps "for app in"
+	# check requirements
+	for tool in $1; do
+		if ! command -v "$tool" >/dev/null; then
+			printf "%s: %s not installed but required\n" "$(basename "\$0")" "$tool" >&2
+			exit 1
+		fi
+	done
+	
+	$0
+snippet doc "script docs"
+	#
+	# DESCRIPTION:
+	#  $1
+	#
+	$0
diff --git a/.vim/UltiSnips/tex.snippets b/.vim/after/snippets/tex.snippets.todo
index de9a974..de9a974 100644
--- a/.vim/UltiSnips/tex.snippets
+++ b/.vim/after/snippets/tex.snippets.todo
diff --git a/.vim/autoload/snips.vim b/.vim/autoload/snips.vim
new file mode 100644
index 0000000..3136c2a
--- /dev/null
+++ b/.vim/autoload/snips.vim
@@ -0,0 +1,8 @@
+
+function snips#exec(arg)
+  return luaeval("require('snips').exec")(a:arg)
+endfunction
+
+function snips#comment(arg)
+  return luaeval("require('snips').comment")(a:arg)
+endfunction
diff --git a/.vim/lua/plugins.lua b/.vim/lua/plugins.lua
index 7b15a7a..7d19781 100644
--- a/.vim/lua/plugins.lua
+++ b/.vim/lua/plugins.lua
@@ -1,4 +1,6 @@
--- vim: foldenable
+-- vim: fen fdm=marker fdl=0
+---@diagnostic disable: undefined-global
+
 -- load by calling `lua require('plugins')` from your init.vim
 local g = vim.g
 
@@ -332,25 +334,19 @@ return require('packer').startup({function()
   use {'tjdevries/astronauta.nvim'}
 
   -- snippets
-  use {'SirVer/ultisnips', -- {{{
-    disable = true,
-    requires = {'honza/vim-snippets'},
+  use {'dcampos/nvim-snippy', -- {{{}
+    requires = {
+      'honza/vim-snippets'
+    },
     config = function()
-      vim.g.UltiSnipsJumpForwardTrigger = "<tab>"
-      vim.g.UltiSnipsJumpBackwardTrigger = "<s-tab>"
+      local S = require('snippy')
+      local K = require('astronauta.keymap')
+      K.inoremap { '<C-j>', function() if S.can_jump(1) then S.next() else return '<C-j>' end end }
+      K.inoremap { '<C-k>', function() if S.can_jump(-1) then S.previous() else return '<C-k>' end end }
+      K.snoremap { '<C-j>', function() if S.can_jump(1) then S.next() else return '<C-j>' end end }
+      K.snoremap { '<C-k>', function() if S.can_jump(-1) then S.previous() else return '<C-k>' end end }
     end} -- }}}
 
-  use {'norcalli/snippets.nvim',
-    config = function()
-      require('snippets').use_suggested_mappings()
-      -- NOTE(robert): write your own inserter using the plenary helpers
-      require('snips')
-    end}
-
-  -- use {'L3MON4D3/LuaSnip',
-  --   config = "require('plugins._ultisnips')",
-  -- }
-
   use {'junegunn/vim-easy-align'}
 
   use {'editorconfig/editorconfig-vim', -- {{{
diff --git a/.vim/lua/snips.lua b/.vim/lua/snips.lua
index b15ffbf..b8c8b77 100644
--- a/.vim/lua/snips.lua
+++ b/.vim/lua/snips.lua
@@ -1,122 +1,36 @@
--- vim: foldenable
+local M = {}
 
-local system = function(cmd)
-  return function()
-    local args = vim.split(cmd, ' ')
-    local command = args[1]
-    table.remove(args, 1)
-    local output = require('plenary.job'):new({
-      command = command,
-      args = args,
-      enable_recording = true,
-    }):sync()
-    if #output > 1 then
-      return table.concat(output, '\n')
-    else
-      return output[1]
-    end
-  end
+M.exec = function(cmd)
+  return io.popen(cmd):read'*l'
 end
 
-local U = require'snippets.utils'
-require('snippets').snippets = {
-  _global = {
-    today = [[${=os.date("%Y-%m-%d")}]],
-    nowutc = [[${=os.date("!%Y-%m-%dT%H:%M:%SZ")}]],
-    nowloc = [[${=os.date("%Y-%m-%dT%H:%M:%S%z")}]],
-
-    me = [[${=io.popen('git config --get user.name'):read"*l"} <${=io.popen('git config --get user.email'):read"*l"}>]],
-
-    ok = "✔",
-    bad = "✘",
-
-    todo = U.force_comment [[TODO(${=io.popen("id -un"):read"*l"}): ]],
-    note = U.force_comment [[NOTE(${=io.popen("id -un"):read"*l"}): ]],
-  },
-
-  sh = { -- {{{
-    skel = U.match_indentation [[
-#!/bin/sh
-set -e
-[ -n "\$DEBUG" ] && set -x
-]],
-
-    deps = U.match_indentation [[
-# check requirements
-for tool in ${1}; do
-	if ! command -v "\$tool" >/dev/null; then
-		printf "%s: %s not installed but required\n" "\$(basename "\$0")" "\$tool" >&2
-		exit 1
-	fi
-done
-]],
-
-    getopt = U.match_indentation [[
-${2}=
-while getopts ${1}h opt; do
-	case "\$opt" in
-	${1})	${2}=1 ;;
-	h|?)
-    printf "usage: %s [-h]\n" "\$(basename "\$0")"
-		printf "\n"
-		printf "  -${1} \t ${2}\n"
-		printf "\n"
-		exit 2 ;;
-	esac
-done
-shift \$((OPTIND - 1))
-]],
-  }, -- }}}
-
-  tex = { -- {{{
-    brief = U.match_indentation [[
-\documentclass{dinbrief}
-\usepackage{graphicx}
-\usepackage[a4paper,margin=30truemm]{geometry}
-% language
-\usepackage{polyglossia}
-\setdefaultlanguage[spelling=new]{german}
-% font
-\usepackage{fontspec}
-\setmainfont{IBM Plex Sans}
-\setmonofont{IBM Plex Mono}
-% dinbrief options
-\nowindowtics
-\nowindowrules
-
-% unterschrift
-\newcommand{\setsign}{\includegraphics[height=30truemm]{/home/robert/Pictures/sign.png}}
-\signature{Robert Günzler}
-\address{
-% absender
-  Robert Günzler \\\\
-  ${4:STREET} \\\\
-  ${5:PLZ} Berlin}
-
-\date{\today}
-\place{Berlin}
-
-% betreff
-% \subject{{\bf anliegen}}
-
-\begin{document}
-\begin{letter}{
-% empfänger
-  ${1}
-
-\opening{${2:Sehr geehrte Damen und Herren,}}
-
-${0}
-
-\vspace{10truemm}
-\closing[\protect\setsign]{${3:Mit freundlichen Grüßen}}
-\end{letter}
-\end{document}
-]],
-  }, -- }}}
+local function find_sub(s, replacement, pattern, start, special)
+  local x1, x2 = s:find(pattern, start, special)
+  if x1 then
+    return s:sub(1, x1-1) .. replacement .. s:sub(x2+1), x1, x2
+  end
+  return s
+end
+-- Only works with prefix comments.
+local function get_line_comment()
+  local cms = vim.bo.commentstring
+  -- This whole pesc dance is a bummer.
+  local pattern = '^(%s*)' ..
+  (find_sub(vim.pesc((find_sub(cms, '\0', '%s', 1, true))), '(%s*).*', '\0', 1, true))
+  local pre_ws, inner_ws = vim.api.nvim_get_current_line():match(pattern)
+  if pre_ws then
+    return pre_ws .. cms:format('') .. inner_ws
+  end
+  return ''
+end
+M.comment = function(str)
+  -- add space
+  local prefix = vim.bo.commentstring:format(''):gsub('%S$', '%0 ')
+  local comment = get_line_comment()
+  if comment ~= '' then
+    prefix = ''
+  end
+  return prefix .. str
+end
 
-  org = {
-    todo = [[* TODO ]],
-    note = [[* ]],
-  }
-}
+return M