Fill in implementation of crystal-insert-on-new-line
This commit is contained in:
parent
c36583524c
commit
dbb548af2d
|
@ -210,12 +210,29 @@ define-command -hidden crystal-indent-on-new-line %{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
define-command -hidden crystal-insert-on-new-line %{
|
define-command -hidden crystal-insert-on-new-line %[
|
||||||
evaluate-commands -no-hooks -draft -itersel %{
|
evaluate-commands -no-hooks -draft -itersel %[
|
||||||
# Copy comment prefix and following whitespaces
|
# Copy comment prefix and following whitespaces
|
||||||
try %{ execute-keys -draft k <a-x> s '^\h*\K#\h*' <ret> y j gl p }
|
try %{ execute-keys -draft k <a-x> s '^\h*\K#\h*' <ret> y j gl p }
|
||||||
}
|
|
||||||
}
|
# Add `end` token if needs be
|
||||||
|
# The 'x' register is to save the leading whitespaces of the opening token
|
||||||
|
evaluate-commands -save-regs x %[
|
||||||
|
# Save the leading whitespaces in register 'x'
|
||||||
|
try %{ execute-keys -draft k <a-x> s ^\h* <ret> \" x y }
|
||||||
|
try %[
|
||||||
|
evaluate-commands -draft %[
|
||||||
|
# Make sure previous line opens a block
|
||||||
|
execute-keys -draft k <a-x> <a-k> ^<c-r>x(?:begin|case|class|def|for|if|module|unless|until|while|.+\bdo\h\|.+(?=\|))[^0-9A-Za-z_!?] <ret>
|
||||||
|
# Make sure `end` doesn't already exist on indent level
|
||||||
|
execute-keys -draft }i J <a-x> <a-K> ^<c-r>x(?:end|else|elsif|rescue|when)[^0-9A-Za-z_!?] <ret>
|
||||||
|
]
|
||||||
|
# Insert new line with end prepended by contents of register 'x'
|
||||||
|
execute-keys -draft o <c-r>x end <esc>
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
define-command -hidden crystal-fetch-keywords %{
|
define-command -hidden crystal-fetch-keywords %{
|
||||||
set-register dquote %sh{
|
set-register dquote %sh{
|
||||||
|
|
Loading…
Reference in New Issue
Block a user