AFAIK `vterm` is basically a square of the size of the whole window it
is placed in. As a consequence `M-x count-words` shows 30 lines even
for freshly spawned `vterm` with just one line of text. And as a
consequence `G` always jumps down to the bottom of the window, even
though it is an unused line.
This patch changes the behavior and makes `G` jump to the last prompt
line. Which in ideal world, should be the last line of the buffer.
It is not 100% bulletproof but we don't have any function telling us
the point or line number of the last prompt, and it doesn't seem to be
easy to implement, so I needed to workaround this.
Currently, pressing the `x` key in normal mode does nothing. I don't
know much about `:motion` but AFAIK `evil-delete-char` doesn't
exist. Using `evil-forward-char` fixes the issue.
The original `evil-first-non-blank` isn't usable because the beginning
of the prompt is the first non-blank character. Strangely enough,
`vterm-beginning-of-line` didn't work either.
The `vterm-yank` that is currently bound to `p` actually pastes before
the cursor, so I am rebinding it to `P` and adding a function for
pasting after the cursor.
We have `0` for jumping at the very first character of the current
line and `^` for jumping to the non-blank character. It is useful to
keep this distinction in `vterm` buffers. However, it doesn't make
much sense in the command part. Because we have a prompt, both of the
commands jump to the very first character. I think it would be more
useful to change `^` to jump to the first non-blank character after
the prompt.