I am often editing my own scripts as I develop them. I want to make a better workflow for working with scripts like this.
Currently
Currently I am combining nvim
with a which
subshell to etit these files like this.
for now lets use my todo command as an example
nvim `which todo`
First pass
On first pass I made a bash function to do exactly what I have been doing.
ewhich () {$EDITOR `which "$1"`}
The $1
will pass the first input to the which subshell. Now we can edit our todo script like this.
ewich todo
Note, I use bash functions instead of aliases for things that require input.
Final State
This works fine for commands that are files, but not aliases or shell functions. Next I jumped to looking at the output of command -V $1
.
- if the command is not found, search for a file
- if its a builtin, exit
- if its an alias, open my
~/.alias file to that line
- if its a function, open my
~/.alias file to that line
ewhich () { case `command -V $1` in
"$1 not found")
FILE=`fzf --prompt "$1 not found searching ..." --query $1`
[ -z "$FILE" ] && echo "closing" || $EDITOR $FILE;;
*"is a shell builtin"*)
echo "$1 is a builtin";;
*"is an alias"*)
$EDITOR ~/.alias +/alias\ $1;;
*"is a shell function"*)
$EDITOR ~/.alias +/^$1;;
*)
$EDITOR `which "$1"`;;
esac
a bit more ergo, and less readable
To make it easier to type, at the sacrifice of readability for anyone watching I added a single character e
alias to ewhich. So when I want to edit anything I just use e
.
alias e=ewhich
Results
Here is a quick screencast of how it works.