diff options
| -rw-r--r-- | .vim/UltiSnips/all.snippets | 32 | ||||
| -rw-r--r-- | .vim/UltiSnips/sh.snippets | 57 | ||||
| l--------- | .vim/UltiSnips/vimwiki.snippets | 1 | ||||
| -rw-r--r-- | .vim/after/snippets/_.snippets | 22 | ||||
| -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.snippets | 48 | ||||
| -rw-r--r-- | .vim/after/snippets/tex.snippets.todo (renamed from .vim/UltiSnips/tex.snippets) | 0 | ||||
| -rw-r--r-- | .vim/autoload/snips.vim | 8 | ||||
| -rw-r--r-- | .vim/lua/plugins.lua | 30 | ||||
| -rw-r--r-- | .vim/lua/snips.lua | 150 |
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 |