This is really cool, but the lack of the ability to have code at runtime to do things dynamically is a massive limitation for me, I think most of my issues could be solved with just the ability to do things at runtime. Here's some things I couldn't get working in helix:
- Can't make the the editor's theme automatically switch at runtime when I change the system to dark/light mode. In neovim this is done by hooking Signal and VimResume.
- Can't dynamically configure auto-formatters for python projects on the basis of the presence and contents of a file located at the root*
- Can't turn off the completely unusual feature of having the tabstop position change (for the actual tab character) depending on the language, or to set a default. Also, why on earth is the bash (or shell) tabstop set to 2 characters?
- Can't only show trailing whitespace.
- Editor doesn't warn you when you open a file twice (only once you actually edit it). In neovim I have this set up with a custom bit of code to find out which window the neovim instance is in and focus that window instead. An incredibly neat feature you can't seem to implement in hx either.
At this point I can't spend much more time with this, but may later.
The main issue I have with helix (and had with kakoune when I tried it) is just the vast number of slight issues. I don't really care that the motions are different (I agree that the vim motions are inconsistent and would be happy to ditch them for something more consistent) but there's just too many little things for me to feel happy with the end result.
*I have worked around this in hx temporarily using a bash script which works in the formatter key in a [[language]] block for python:
#!/usr/bin/env bash
bail() { exec cat; }
declare -A rootfile=([python]=pyproject.toml)
declare -A format_cmd=([isort]="isort -" [black]="black -q -")
while [[ ! -e "${rootfile[$1]}" && ! .. -ef . ]]; do cd .. || bail; done
[[ -e "${rootfile[$1]}" ]] || bail
pipeline=()
{ exec 3< .autoformat; } 2>/dev/null || bail
while read -r; do
pipeline+=("${format_cmd[$REPLY]}")
done <&3
recpipe() {
if (( $# > 1 )); then
$1 | recpipe "${@:2}"
else
$1
fi
}
recpipe "${pipeline[@]}"
I encountered what I feel might be a bug during this, if the code formatter exits with a failure, you end losing your code.
- Can't make the the editor's theme automatically switch at runtime when I change the system to dark/light mode. In neovim this is done by hooking Signal and VimResume. - Can't dynamically configure auto-formatters for python projects on the basis of the presence and contents of a file located at the root* - Can't turn off the completely unusual feature of having the tabstop position change (for the actual tab character) depending on the language, or to set a default. Also, why on earth is the bash (or shell) tabstop set to 2 characters? - Can't only show trailing whitespace. - Editor doesn't warn you when you open a file twice (only once you actually edit it). In neovim I have this set up with a custom bit of code to find out which window the neovim instance is in and focus that window instead. An incredibly neat feature you can't seem to implement in hx either.
At this point I can't spend much more time with this, but may later.
The main issue I have with helix (and had with kakoune when I tried it) is just the vast number of slight issues. I don't really care that the motions are different (I agree that the vim motions are inconsistent and would be happy to ditch them for something more consistent) but there's just too many little things for me to feel happy with the end result.
*I have worked around this in hx temporarily using a bash script which works in the formatter key in a [[language]] block for python:
I encountered what I feel might be a bug during this, if the code formatter exits with a failure, you end losing your code.